在平时做题的时候,我们有时会遇到一些数据范围非常大的题,一般已经超过long long类型存储的范围。这个时候我们就需要用到字符串来实现这种大数据的运算。
下面提供由c++实现的大数加法和乘法。
大数加法
string add(string a,string b){
string s;
int len1,len2;
len1=a.size()-1;
len2=b.size()-1;
int flag=0;
while(len1>-1&&len2>-1){
int sum=flag+(a[len1--]-'0')+(b[len2--]-'0');
s+=char((sum)%10+'0');
flag=sum/10;
}
while(len1>-1){
int sum=flag+(a[len1--]-'0');
s+=char((sum)%10+'0');
flag=sum/10;
}
while(len2>-1){
int sum=flag+(b[len2--]-'0');
s+=char((sum)%10+'0');
flag=sum/10;
}
if(flag)
s+=char('0'+flag);
int len=s.size()-1;
while(len>-1){
if(s[len]!='0')
break;
s=s.substr(0,s.size()-1);
len--;
}
for(int i=0;i<s.size()/2;i++){
char c=s[i];
s[i]=s[s.size()-i-1];
s[s.size()-i-1]=c;
}
if(s.size()==0)
s+='0';
return s;
}
大数乘法
string mul(string a,string b){
string s;
int len1,len2;
len1=a.size();
len2=b.size();
for(int i=0;i<len2;i++){
int num=b[len2-i-1]-'0';
int len=len1-1;
int flag=0;
string temp="";
while(len>-1){
int sum=flag+(a[len--]-'0')*num;
temp+=char((sum)%10+'0');
flag=sum/10;
}
if(flag)
temp+=char('0'+flag);
len=temp.size();
for(int j=0;j<len/2;j++){
char c=temp[j];
temp[j]=temp[len-j-1];
temp[len-j-1]=c;
}
for(int j=0;j<i;j++)
temp+='0';
s=add(s,temp);
}
return s;
}