最近又开始做ACM题目了,昨天无意中翻阅自己写的一些blog,07年写的一篇blog:http://www.cnblogs.com/phinecos/archive/2007/12/22/1011028.html,发现评论中有朋友报了一个bug,随手调试了下程序,发现错误原因在于少了“++”,不过那代码也是AC了的,这说明OJ的测试数据有问题。特此修正代码如下:

  1. #include <iostream>   
  2. #include <string>   
  3. using namespace std;   
  4.  
  5. void Add(string a,string b,char sum[],int& count)   
  6. {//大数加法  
  7.     int len1 = a.length();//数a的长度  
  8.     int len2 = b.length();//数b的长度  
  9.     int i = len1-1,j = len2-1,temp = 0,carryIn = 0;//初始进位为  
  10.     count = 0;   
  11.     //从最后一位开始做加法  
  12.     while(i>=0&&j>=0)   
  13.     {   
  14.         temp = a[i]-'0'+b[j]-'0'+carryIn;//计算当前位  
  15.         sum[count++] = temp%10+'0';   
  16.         carryIn = temp/10;//计算进位  
  17.         --i;   
  18.         --j;   
  19.     }   
  20.     //第一个数还有剩余  
  21.     if(i>=0)   
  22.     {   
  23.         //利用进位继续做  
  24.         while(i>=0)   
  25.         {   
  26.             temp = a[i]-'0'+carryIn;   
  27.             sum[count++] = temp%10+'0';   
  28.             carryIn = temp/10;   
  29.             --i;   
  30.         }   
  31.     }   
  32.     //第二个数还有剩余  
  33.     if(j>=0)   
  34.     {   
  35.         while(j>=0)   
  36.         {   
  37.             temp = b[j]-'0'+carryIn;   
  38.             sum[count++] = temp%10+'0';   
  39.             carryIn = temp/10;   
  40.             --j;   
  41.         }   
  42.     }   
  43.     //最高位特殊考虑下  
  44.     if(carryIn>0)   
  45.     {   
  46.         sum[count++] = '1';   
  47.     }   
  48. }   
  49.  
  50. void reversePrint(char arr[],int len)   
  51. {//逆向输出  
  52.     for(int i=len-1;i>=0;--i)   
  53.     {  
  54.         cout<<arr[i];   
  55.     }  
  56.     cout<<endl;   
  57. }   
  58.  
  59. int main()   
  60. {   
  61.     string a,b;   
  62.     char sum[2000];//和  
  63.     memset(sum,'0',2000);   
  64.     int nCount = 0;   
  65.     int caseNum,curCase=0;   
  66.     cin>>caseNum;   
  67.     do   
  68.     {   
  69.         curCase++;   
  70.         cin>>a>>b;   
  71.         Add(a,b,sum,nCount);   
  72.         cout<<"Case "<<curCase<<":"<<endl;   
  73.         cout<<a<<" + "<<b<<" = ";   
  74.         reversePrint(sum,nCount);   
  75.         if(curCase<caseNum)   
  76.         {  
  77.             cout<<endl;   
  78.         }  
  79.     }while(curCase<caseNum);   
  80.     return 0;   
  81. }