大数加法
思路:
用字符串模拟加法的原理即可,注意处理细节的问题。
为了能够当成模版使用,返回的值处理为字符串。
代码如下:
1 //大数加法--模版(string 实现) 2 #include<iostream> 3 #include<string> 4 using namespace std; 5 6 string add(string a,string b) 7 { 8 int i=a.length()-1,j=b.length()-1;//倒序相加 9 int k=0,flag=0;//flag 进位的标志 10 string ans=""; 11 while(i>=0&&j>=0) 12 { 13 ans+=a[i]+b[j]-'0'+flag; 14 flag=0; 15 if(ans[k]>'9') 16 { 17 flag=1; 18 ans[k]=ans[k]-10; 19 } 20 i--,j--,k++; 21 } 22 while(i>=0) 23 { 24 ans+=a[i]+flag; 25 flag=0; 26 if(ans[k]>'9') 27 { 28 flag=1; 29 ans[k]=ans[k]-10; 30 } 31 i--,k++; 32 } 33 while(j>=0) 34 { 35 ans+=b[j]+flag; 36 flag=0; 37 if(ans[k]>'9') 38 { 39 flag=1; 40 ans[k]=ans[k]-10; 41 } 42 j--,k++; 43 } 44 if(flag)//连续进位的情况 45 { 46 ans+=(flag+'0'); 47 k++; 48 } 49 char t; 50 for(i=0,j=k-1;i<j;i++,j--) //反转 51 { 52 t=ans[i];ans[i]=ans[j];ans[j]=t; 53 } 54 return ans; 55 } 56 int main() 57 { 58 string a,b; 59 while(cin>>a>>b) 60 { 61 cout<<add(a,b)<<endl; 62 } 63 return 0; 64 }
值得注意的是:string添加字符的方式,以及连续进位的细节