@smartZhou
2019-01-09T03:17:36.000000Z
字数 990
阅读 97
算法
算法思路:
用字符串string类型去保存两个数a,b,最终的结果保存在a字符串中。所以先把a,b中的长字符串放在a中,短字符串放在b中,可以利用SLT中内置的swap函数实现。将长串放在a中的代码如下:
if(a.size()<b.size()){string temp=a;a=b;b=temp;}
或者
if(a.size()<b.size()){swap(a,b);}
基本思路为使用string将所需要求得大数字存起来,然后进行倒序相加,发现和超过十之后取模进位。
按从低位到高位的顺序两个数字的每一位对应相加,并加上低一位的进位(如果有进位的话),如果某一位对应的数字加起来大于10,就对10取模得到当前位上的数字,再向高位进1,然后再考虑更高一位数字的相加,依次类推,如果位数较长的那个数字的最高位还有进位,别忘记了位数还要增加1。
/*****************************Project:High precision algorithmFile:Auther:smartZdwModified Date: 2019-1-9*****************************/#include <iostream>#include <string>using namespace std;string BigDataAdd(string,int,string,int);int main(){string a,b;cin>>a>>b;if(a.size()<b.size()){swap(a,b);}cout<<BigDataAdd(a,a.size(),b,b.size())<<endl;return 0;}string BigDataAdd(string a,int lena,string b,int lenb){int aa,bb,sum,flag=0;while(lena>0){aa=a[lena-1]-'0';if(lenb>0)bb=b[lenb-1]-'0';elsebb=0;sum=aa+bb+flag;if(sum>10){a[lena-1]='0'+sum%10;flag=1;}else{a[lena-1]='0'+sum;flag=0;}lena--;lenb--;}if(flag==1)a="1"+a;return a;}