杭电oj1002即用c++实现两个大数相加

  1. #include<iostream>  
  2. #include<string>  
  3. #include<cstdio>  
  4. using namespace std;  
  5.   
  6. int main()  
  7. {  
  8.     string a,b;  
  9.     int num,sum[1000];//数组尽量开大点,不然很容易越界!  
  10.     cin>>num;  
  11.     for(int l=0;l<num;l++)  
  12.     {  
  13.         cin>>a>>b;  
  14.         int m=0,n=0,temp=0,i,k;  
  15.         int q=0;//用于记录sum数组的长度!!  
  16.         i=a.length();  
  17.         k=b.length();  
  18.         i=i-1;  
  19.         k=k-1;  
  20.         while(i>=0 && k>=0)//像是这样加,会一直加到一个数加完  
  21.         {  
  22.             m=a[i]-'0';  
  23.             n=b[k]-'0';  
  24.             sum[q++]=(temp+m+n)%10;  
  25.             temp=(temp+m+n)/10;//temp取进位,并且加到下一次的加法中  
  26.             i--;  
  27.             k--;  
  28.         }  
  29.         //还需要处理一个长度的问题,判断哪个长,哪个短!  
  30.       if(i>k)//a数比较大,确切的说是比较长!  
  31.       {//cout<<"I am 1"<<endl;  
  32.           while(i>=0)  
  33.           {  
  34.                
  35.              m=a[i]-'0';  
  36.              sum[q++]=(temp+m)%10;  
  37.              temp=(temp+m)/10;
  38.   
  39.              i--;  
  40.           }  
  41.       }  
  42.       if(k>i)  
  43.       {  
  44.          while(k>=0)  
  45.           {  
  46.              m=b[k]-'0';
  47.              sum[q++]=(temp+m)%10;  
  48.              temp=(temp+m)/10;  
  49.              k--;  
  50.           }  
  51.       }  
  52.       sum[q]=temp;   
  53.       cout<<"Case "<<l+1<<":"<<endl;  
  54.      cout<<a<<" + "<<b<<" = ";  
  55.       if(sum[q]!=0) cout<<sum[q];  
  56.           for(--q;q>=0;q--)  
  57.           cout<<sum[q];  
  58.      cout<<endl;  
  59.      if(l<num-1) cout<<endl;  
  60.   
  61.     }
  62.  return 0;  
  63. }