前言
上一篇文章,我們實現了(高精度)大數的加減法,接下來我們一起實現下大數的乘除法,由於算法比較簡單,和我們小學學的普通的四則運算法則類似。
這里的乘除法均實現的是一個大數 乘(除)一個int型的整數。
下面是實現代碼。
代碼
#include <iostream>
#include <vector>
using namespace std;
//乘法
vector<int> mul(vector<int> &A, int b)
{
vector<int> C;//結果數組
int t=0;
for(int i=0;i<A.size()||t;i++)
{
if(i<A.size()) t+=A[i]*b;
C.push_back(t%10);
t/=10;
}
return C;
}
//除法
vector<int> div(vector<int> &A,int b,int &k)
{
vector<int> C;//保存商
k=0;//保存余數
for(int i=A.size()-1;i>=0;i--)
{
k=k*10+A[i];
C.push_back(k/b);
k%=b;
}
while(C.size()>=1&&C.front()==0) C.erase(C.begin());//消除前導0
return C;
}
int main()
{
string a,op;
vector<int> A;
int b;
cin >> a >> op >> b;
for(int i=a.size()-1;i>=0;i--) A.push_back(a[i]-'0');
if(op=="mul")
{
auto C = mul(A,b);
cout << "積:";
for(int i=C.size()-1;i>=0;i--) printf("%d",C[i]);
}
if(op=="div")
{
int k=0;
auto C = div(A,b,k);
cout << "商:";
for(auto c:C) cout << c;
if(k!=0)
cout << " 余: " << k <<endl;
}
return 0;
}
輸入輸出測試
輸入 #1
99999999 mul 1234
輸出 #1
積:123399998766
輸入 #2
10000000000000 div 9
輸出 #2
商:1111111111111 余: 1