解析:  翻转数,测试数据的数可能很大,以下代码WA,可见对于acm如果不能保证程序决定正确,就绝对错误!

 

 1 #include <stdio.h>
 2 typedef long long llong;
 3 static llong reverse(llong n);
 4 
 5 int main()
 6 {
 7     int n;
 8     llong a, b, sum;
 9     scanf("%d", &n);
10     while(n--){
11         scanf("%lld%lld", &a, &b);
12         a = reverse(a);
13         b = reverse(b);
14         sum = reverse(a + b);
15         printf("%lld\n", sum);
16     }
17     return 0;
18 }
19 static llong reverse(llong n)
20 {
21     int result = 0;
22     while(n > 0){      
23         result = result * 10 + n % 10; 
24         n /= 10;
25     }
26     return result;
27 }

 

 

 

 当然,我又AC代码:

 1 #include <stdio.h>
 2 #include <string.h>
 3 
 4 #define N 5000               /*结果长度少于500的加法计算*/
 5 
 6 static char s1[N], s2[N];    /*避免命名冲突*/
 7 static char *p1, *p2;         /*真正计算的数据范围*/
 8 
 9 static void large_add(void);
10 static void reserve(char *p);
11 /***********************************************************************/
12 static void large_add(void)
13 {
14     /*默认p1与p2均指向要相加的正确的位置*/
15     int i, t;
16     int l1 = strlen(p1) - 1;
17     int l2 = strlen(p2) - 1;
18     t = l2 - l1;            
19     char *p = (l1 >= l2) ? (p1 - 1) : (p1 - 1 - t);
20     t = p1 - p;             
21     for(i = 0; i < t; i++)
22         p[i] = '0';
23     l1 = strlen(p) - 1;  
24     t = l1 - l2;         
25     for(i = l1; i - t >= 0; i--)
26         p[i] += p2[i - t] - '0';
27     /*相加与进位要分割开来*/
28     for(i = l1; i > 0; i--){
29         if(p[i] > '9'){
30             p[i] -= 10;
31             p[i-1]++;
32         }
33     }
34     if(*p == '0')
35         p++;
36     p1 = p;
37 }
38 /**********************************************************************/
39 int main()
40 {
41     int n, i;
42     scanf("%d", &n);
43     p1 = &s1[N/2];
44     p2 = &s2[N/2];
45     while(n--){
46         scanf("%s %s", p1, p2);
47         reserve(p1);
48         reserve(p2);
49         large_add();
50         reserve(p1);
51         i = 0;
52         while(p1[i] == '0'){
53             if(p1[1] == '\0')
54                 break;
55             p1++;
56         }
57         printf("%s\n", p1);
58     }
59     return 0;
60 }
61 static void reserve(char *p)
62 {
63     int l = strlen(p), i;
64     char t;              
65     for(i = 0; i < l / 2; i++){
66         t = p[i];
67         p[i] = p[l - i - 1];
68         p[l - i - 1] = t;
69     }
70 }