HDU 1002 A + B Problem II(AC代码)

 1 #include <stdio.h>
 2 #include <string.h>
 3 #define MAX 1009
 4 int main()
 5 {
 6     char a[MAX]={0},b[MAX]={0};
 7     int n,i,len1,len2,j=0,z=0,r=0,k=0;
 8     char *p=NULL;
 9     scanf("%d",&n);    
10     if( 0<n&&n<21 ){
11         for(i=0;i<n;i++){
12             j=0;
13             z=0;
14             r=0;
15             scanf("%s",a);
16             scanf("%s",b);
17             printf("Case %d:\n",i+1);
18             printf("%s + %s = ",a,b);
19             len1=strlen(a);
20             len2=strlen(b);
21             if( len1>len2 ){
22                 b[len1]='\0';
23                 len1--;
24                 len2--;
25                 while( len2>=0 ){
26                     b[len1--]=b[len2--];
27                 }
28                 while(len1>=0){
29                     b[len1--]='0';
30                 }
31             }
32             else if( len2>len1 ){
33                 a[len2]='\0';
34                 len1--;
35                 len2--;
36                 while( len1>=0 ){
37                     a[len2--]=a[len1--];
38                 }
39                 while(len2>=0){
40                     a[len2--]='0';
41                 }
42             }
43              len1=strlen(a);
44               len2=strlen(b);
45             len1--;
46             len2--;
47             while( len1>=0 && len2>=0 )   {
48                 z= (b[len2]-'0') + (a[len1]-'0') + r;  
49                 r=z/10;
50                 z=z-r*10;
51                 b[len2]=z+'0';
52                 len1--;
53                 len2--;
54             };
55             if( r!=0 ){
56                 printf("1");
57                 printf("%s\n",b);    
58             }
59             else{
60                 len2=strlen(b);
61                 while( b[k]=='0'&&k<len2 ){
62                     k++;
63                 }
64                 p=&b[k];
65                 printf("%s\n",p);
66             }
67             if(i!=n-1)
68                 printf("\n");
69 
70         }
71     }
72     return 0;
73 }

格式很重要:

Case+空格+i+:(冒号后无空格)

a+空格+b+空格+=+空格+c(直接把+号去掉,再按空格键代替空格)

(空一行)

<<-继续上面格式->>

 

注意:最后一个case输完后是不需要空行的,所以会有代码

  if(i!=n-1)
      printf("\n");  //当非最后一个case时,输出一个空行


解题思路:
1、数字可能太大,得用数组逐个记下来,第一个存在a,另一个存在b。
2、strlen算它们各自的长度(strlen不计算'\0'),从数组的第strlen个开始
3、相加之后要考虑是否需要进一位,需要的话把十位上数字提出来,
提取出来和第strlen-1的那两个数相加。
4、刚被提取
个位上的数字存到长度较长的数组中,节省点空间。
5、一直重复。

要注意:
输入可能是00001 00002,那么你要输出3,不能是00003。
输入可能是99999 99998,那么考虑进位时,因两个数组一样长,所以可能进位会填不进数组,要单独输出。
输入可能是99999 1,那么也是考虑进位的问题。
输入可能是1 9999,也是进位问题,要考虑不同长度的数字的前后顺序。

posted @ 2014-10-26 13:42  xcw0754  阅读(144)  评论(0编辑  收藏  举报