大数加法

思路:

     用字符串模拟加法的原理即可,注意处理细节的问题。

为了能够当成模版使用,返回的值处理为字符串。

 

代码如下:

 

 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添加字符的方式,以及连续进位的细节

 

posted on 2012-07-20 16:57  L_S_X  阅读(733)  评论(0编辑  收藏  举报

导航