string add(string a,string b){
string res;
reverse(a.begin(), a.end());
reverse(b.begin(), b.end());
int i=0;
int m,k=0;
while(a[i]&&b[i]){
m = a[i]+b[i]+k-2*'0';
k = m/10;
res+=(m%10+'0');
i++;
}
if(i==a.size()){
while(i!=b.size()){
m = k + b[i]-'0';
k = m/10;
res +=(m%10)+'0';
i++;
}
if(k)
res += k+'0';
}
if(i==b.size()){
while(i!=a.size()){
m = k + a[i]-'0';
k = m/10;
res += (m%10+'0');
i++;
}
if(k)
res += k + '0';
}
reverse(res.begin(), res.end());
return res;
}
string mul_int(string a,int k){
if(!k)
return "0";
int len = a.length(),carry=0;
reverse(a.begin(), a.end());
for(int i=0;i<len;i++){
int s = (a[i]-'0')*k+carry;
a[i] = s%10+'0';
carry = s/10;
}
while(carry){
a += (carry%10+'0');
carry /= 10;
}
reverse(a.begin(),a.end());
return a;
}
string mul_string(string a,string b){
string res="";
for(int i=a.size()-1;i>=0;i--){
string tmp = mul_int(b, a[i]-'0');
for(int j=0;j<a.size()-1-i;j++){
tmp +='0';
}
res = add(res,tmp);
}
return res;
}
C++大数加法乘法
最新推荐文章于 2024-07-16 20:11:15 发布