大数相加问题:由于数的长度过大,一般的数据类型根本存不了,所以这里用到了用数组模拟大数,从而进行相加的办法解决。
</pre><p><pre name="code" class="cpp">#include<stdio.h>
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
string add(string st1,string st2)
{
if(st1.size()<st2.size()) //判断哪个长
{
string stemp=st1;
st1=st2;
st2=stemp;
}
reverse(st1.begin(),st1.end()); //将string类st1,st2逆转顺序
reverse(st2.begin(),st2.end());
int len1,len2;
len1=st1.length(); //计算各自的长度
len2=st2.length();
int in=0,num; //进位in初始化为0
for(int i=0; i<len2; i++)
{
num=st1[i]-'0'+st2[i]-'0'+in; //各位的和
in=num/10;
num%=10;
st1[i]=num+'0'; //放入较长的string里
}
for(int j=len2; j<len1; j++) //如果遇到例如123 99892这样的样例,123处理完后需要向前边进位
{
num=st1[j]-'0'+in;
in=num/10;
num%=10;
st1[j]=num+'0';
// cout<<in<<" "<<st1<<endl;
}
if(in==1) //相加的结果比原有的string都长
st1+="1";
reverse(st1.begin(),st1.end());
return st1;
}
int main()
{
string str1,str2;
int t;
cin>>t;
int n=0;
while(t--)
{
cin>>str1>>str2;
if(n)
cout<<endl;
cout<<"Case "<<++n<<":";
cout<<endl<<str1<<" + "<<str2<<" = ";
cout<<add(str1,str2)<<endl;
}
return 0;
}