hdu 1002 A + B Problem II 大整数相加
第二次写这道题了...依然写得磕磕绊绊的....好多冗余代码....简直要被格式逼疯了T_T....
关于进位问题的解决方法之一是倒着读入数组....以前写的时候用的是数组前空一位,最后判断下前导0
还有就是字符型读入整形数组要减去‘0’.......还要注意格式......
自己的挫代码......
1 #include<stdio.h> 2 #include<string.h> 3 #define MAX 1010 4 int main() 5 { 6 int n,t=1; 7 scanf("%d",&n); 8 while(t<=n) 9 { 10 char s1[MAX],s2[MAX]; 11 int a[MAX],b[MAX],sum[MAX]; 12 int i,j,l1,l2,mins; 13 scanf("%s%s",&s1,&s2); 14 l1=strlen(s1); 15 l2=strlen(s2); 16 mins=l1<l2?l1:l2; 17 memset(a,0,sizeof(a)); 18 memset(b,0,sizeof(b)); 19 for(i=l1-1,j=0;i>=0;i--) 20 { 21 a[j++]=s1[i]-'0'; 22 } 23 for(i=l2-1,j=0;i>=0;i--) 24 { 25 b[j++]=s2[i]-'0'; 26 } 27 memset(sum,0,sizeof(sum)); 28 for(i=0;i<mins;i++) 29 { 30 sum[i]=sum[i]+a[i]+b[i]; 31 if(sum[i]>9) 32 { 33 sum[i]-=10; 34 sum[i+1]++; 35 } 36 } 37 if(l1==l2) 38 { 39 if(sum[mins]==0) 40 { 41 printf("Case %d:\n",t++); 42 printf("%s + %s = ",s1,s2); 43 for(i=mins-1;i>=0;i--) 44 printf("%d",sum[i]); 45 if(t!=n+1) 46 printf("\n\n"); 47 else 48 printf("\n"); 49 } 50 else 51 { 52 printf("Case %d:\n",t++); 53 printf("%s + %s = ",s1,s2); 54 for(i=mins;i>=0;i--) 55 printf("%d",sum[i]); 56 if(t!=n+1) 57 printf("\n\n"); 58 else 59 printf("\n"); 60 } 61 62 } 63 if(l1>l2) 64 { 65 for(i=mins;i<=l1;i++) 66 { 67 sum[i]+=a[i]; 68 if(sum[i]>9) 69 { 70 sum[i]-=10; 71 sum[i+1]++; 72 } 73 } 74 if(sum[l1]!=0) 75 { 76 printf("Case %d:\n",t++); 77 printf("%s + %s = ",s1,s2); 78 for(i=l1;i>=0;i--) 79 printf("%d",sum[i]) ; 80 if(t!=n+1) 81 printf("\n\n"); 82 else 83 printf("\n"); 84 } 85 else 86 { 87 printf("Case %d:\n",t++); 88 printf("%s + %s = ",s1,s2); 89 for(i=l1-1;i>=0;i--) 90 printf("%d",sum[i]) ; 91 if(t!=n+1) 92 printf("\n\n"); 93 else 94 printf("\n"); 95 } 96 } 97 if(l2>l1) 98 { 99 for(i=mins;i<=l2;i++) 100 { 101 sum[i]+=b[i]; 102 if(sum[i]>9) 103 { 104 sum[i]-=10; 105 sum[i+1]++; 106 } 107 } 108 if(sum[l2]!=0) 109 { 110 printf("Case %d:\n",t++); 111 printf("%s + %s = ",s1,s2); 112 for(i=l2;i>=0;i--) 113 printf("%d",sum[i]) ; 114 if(t!=n+1) 115 printf("\n\n"); 116 else 117 printf("\n"); 118 } 119 else 120 { 121 printf("Case %d:\n",t++); 122 printf("%s + %s = ",s1,s2); 123 for(i=l2-1;i>=0;i--) 124 printf("%d",sum[i]) ; 125 if(t!=n+1) 126 printf("\n\n"); 127 else 128 printf("\n"); 129 } 130 } 131 } 132 }
大神的代码....完全一样的思路,人家代码就写得这么简洁,整整少了三分之二呀!!!!T_T........
1 #include<iostream> 2 #include<cstring> 3 4 using namespace std; 5 6 int s1[1005],s2[1005],ans[1005]; 7 8 int main(){ 9 int t; 10 char str1[1005],str2[1005]; 11 cin>>t; 12 int cases=0; 13 while(t--){ 14 cin>>str1>>str2; 15 if(cases) 16 cout<<endl; 17 int i,j; 18 int len1=strlen(str1),len2=strlen(str2); 19 memset(s1,0,sizeof(s1)); 20 memset(s2,0,sizeof(s2)); 21 memset(ans,0,sizeof(ans)); 22 int si=0,sj=0; 23 for(i=len1-1;i>=0;i--) 24 s1[si++]=str1[i]-'0'; 25 for(j=len2-1;j>=0;j--) 26 s2[sj++]=str2[j]-'0'; 27 28 for(i=0;i<1005;i++){ 29 ans[i]+=s1[i]+s2[i]; 30 if(ans[i]>=10){ 31 ans[i+1]+=ans[i]/10; 32 ans[i]%=10; 33 } 34 } 35 for(j=1004;j>=0;j--) 36 if(ans[j]!=0) 37 break; 38 cout<<"Case "<<++cases<<":"<<endl; 39 if(j==-1){ 40 cout<<"0 + 0 = 0"<<endl; 41 continue; 42 } 43 cout<<str1<<" + "<<str2<<" = "; 44 for(i=j;i>=0;i--) 45 cout<<ans[i]; 46 cout<<endl; 47 } 48 return 0; 49 }