首页 > 代码库 > HDU1002 大数相加

HDU1002 大数相加

 1 #include <iostream> 2 #include <iostream> 3 #include <iomanip> 4 #include<string> 5 #include<cstring> 6 using namespace std; 7  8 string A , B; 9 char a[1010];10 char b[1010];11 char result[1010];12 13 int max(int a,int b)14 {15     return a>b?a:b;16 }17 int main()18 {19     int T;20     cin>>T;21     for(int j=1;j<=T;j++)22     {23         memset(a,0,sizeof(a));24         memset(b,0,sizeof(a));25         memset(result,0,sizeof(a));26         cin>>A>>B;27         int len1=A.size(),len2=B.size();28         int m=len1,n=len2;29         for(int i=0;i<m;i++)30         {31             a[i]=A.at(len1-1);32             len1--;33         }34         for(int i=0;i<n;i++)35         {36             b[i]=B.at(len2-1);37             len2--;38         }39         int k=max(m,n);40 41 42         int t=0;//用于向前进位;43         for(int i=0;i<=k;i++){44             if((a[i]-0)+(b[i]-0)+t>=10) result[i]=(char)((a[i]-0)+(b[i]-0)+t-10+0),t=1;45             else  result[i]=(char)((a[i]-0)+(b[i]-0)+t+0),t=0;46         }47 48         cout<<"Case "<<j<<":"<<endl;49         cout<<A<<" + "<<B<<" = ";50         if(result[k]==0){51             for(int i=k-1;i>=0;i--) cout<<result[i];52         }53         else{54             for(int i=k;i>=0;i--) cout<<result[i];55         }56         cout<<endl;57         if(j!=T) cout<<endl;58 59     }60     return 0;61 }

 

由于数字位数可达1000之多,即使long long也没法计算,那么只能用数组来进行存储,不断进位来解决问题。