逃不掉的烦人问题
所有学C和C加加的都会碰见这个问题,当输入的数超过了整型变量的最大值,计算机将无法正常计算数的加法和减法了,这时候我们只能将输入的数当作字符串来处理,可以用数组,但是由于我们输入的数长度是未知的,用string类对象就可以很好的解决这个问题
代码
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
bool cmp(string a,string b)
{
if(a.size()>b.size())
return 1;
if(a.size()==b.size()&&a>b)
return 1;
return 0;
}
string add(string a,string b)
{
long long lenA=a.length();
long long lenB=b.length();
long long len=max(lenA,lenB)+10;
//翻转,便于从低位逐步求和
reverse(a.begin(),a.end());
reverse(b.begin(),b.end());
string ans(len,'0');//初始化答案为len长,全部为字符0
// 把a拷贝到ans中
for(int i=0;i<lenA;i++)
{
ans[i]=a[i];
}
int tmp=0; //tmp是上一位相加的进位
for(int i=0;i<len;++i)
{
if(i<b.length())
tmp+=(ans[i]-'0')+(b[i]-'0');
else
tmp+=(ans[i]-'0');
ans[i]=tmp%10+'0';
tmp/=10;
}
reverse(ans.begin(),ans.end());//翻转回来
return ans.substr(ans.find_first_not_of('0')); //去掉前面的0
}