前言
一、题目陈述
二、解决思路
使用vector数组模拟存储和计算以实现高精度加减乘除。
三、代码实现
//A+B 其中len(A或B)<=1e6
vector<int> add(vector<int> &A,vector<int> &B) {
vector<int> C;
if(A.size()<B.size()) return add(B,A);
int t=0;
for(int i=0;i<A.size();i++) {
t+=A[i];
if(i<B.size()) t+=B[i];
C.push_back(t%10);
t/=10;
}
if(t) C.push_back(1);
return C;
}
//A-B 其中len(A或B)<=1e6 保证A>=B 判断是否有A>=B
bool cmp(vector<int> &A,vector<int> &B) {
if(A.size()!=B.size()) return A.size()>B.size();
for(int i=A.size()-1;i>=0;i--)
if(A[i]!=B[i]) return A[i]>B[i];
return true;
}
vector<int> sub(vector<int> &A,vector<int> &B) {
vector<int> C;
int t=0;
for(int i=0;i<A.size();i++) {
t=A[i]-t;
if(i<B.size()) t-=B[i];
C.push_back((t+10)%10);
if(t<0) t=1;
else t=0;
}
while(C.size()>1&&C.back()==0) C.pop_back();
return C;
}
//A*α 其中len(A)<=1e6 α<=1e9 把B看成整体,用A的每一位乘B
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;
}
while(C.size()>1&&C.back()==0) C.pop_back();
return C;
}
//A/α 其中len(A)<=1e6 α<=1e9 A/b 商C 余数r
vector<int> div(vector<int> &A,int b,int &r) {
vector<int> C;
r = 0;
for(int i=A.size()-1;i>=0;i--) {
r = r *10+A[i];
C.push_back(r/b);
r %= b;
}
reverse(C.begin(),C.end());
while(C.size()>1&&C.back()==0) C.pop_back();
return C;
}
总结
数组模拟运算的思想。