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也没法计算,那么只能用数组来进行存储,不断进位来解决问题。
HDU1002 大数相加
时间: 2024-11-03 20:50:18