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 }

 

posted on 2014-07-31 19:51  薛定谔的熊猫  阅读(114)  评论(0编辑  收藏  举报

导航