杭电1002 A+Bproblem。。。交了七遍,最后发现原来有五遍是因为没删测试输出= =、、

杭电1002 A+Bproblem。。。交了七遍,最后发现原来有五遍是因为没删测试输出= =、、
2012-02-19 09:34:23

A + B Problem II

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 98985    Accepted Submission(s): 18771

Problem Description
I have a very simple problem for you. Given two integers A and B, your job is to calculate the Sum of A + B.
 
Input
The first line of the input contains an integer T(1<=T<=20) which means the number of test cases. Then T lines follow, each line consists of two positive integers, A and B. Notice that the integers are very large, that means you should not process them by using 32-bit integer. You may assume the length of each integer will not exceed 1000.
 
Output
For each test case, you should output two lines. The first line is "Case #:", # means the number of the test case. The second line is the an equation "A + B = Sum", Sum means the result of A + B. Note there are some spaces int the equation. Output a blank line between two test cases.
 
Sample Input
2 1 2 112233445566778899 998877665544332211
 
Sample Output
Case 1: 1 + 2 = 3 Case 2: 112233445566778899 + 998877665544332211 = 1111111111111111110
 1 #include<stdio.h> 
2 #include<string.h>
3 int main()
4 {
5 int n,i,l1,l2,max,a,j,t;
6 char s1[1001],s2[1001],s3[1001];
7 scanf("%d",&n);
8 for(i = 0;i < n;i++)
9 {
10 scanf("%s%s",s1,s2);
11
12 l1 = strlen(s1);
13 l2 = strlen(s2);
14 if(l1>l2)
15 max = l1;
16 else
17 max = l2;
18
19 t=max;
20 memset(s3,'\0',1001);
21 memset(s3,'0',max+1);
22 l1 = l1-1;
23 l2 = l2-1;
24 max = max;
25 s3[0]='0';
26 while(l1>=0 && l2>=0)
27 {
28 a = s1[l1--]-'0'+s2[l2--]-'0'+s3[max]-'0';//问题可以直接简化为小学的算术题,从后往前算
29 s3[max--] ='0'+a%10;
30 if(a>=10)
31 s3[max]+=1;//大于十的时候记得向前加一,因为以上三个数永远不会大于等于20.。。。
32
33 }
34 while(l1>=0)
35 {
36 a = s3[max]-'0'+s1[l1--]-'0';
37 s3[max--]='0'+a%10;
38 if(a>=10)
39 s3[max]+=1;
40 }
41 while(l2>=0)
42 {
43 a = s3[max]-'0'+s2[l2--]-'0';
44 s3[max--]='0'+a%10;
45 if(a>=10)
46 s3[max]+=1;
47 }
48
49 printf("Case %d:\n",i+1);
50 printf("%s + %s = ",s1,s2);
51
52 if(s3[0] > '0')
53 printf("%c",s3[0]);//这一步很重要,假设是1和9想加,会上升一位
54 for(j = 1;j < t; j++)
55 printf( "%c", s3[j]);
56 printf( "%c\n", s3[j]);
57 if(i<n-1)
58 printf("\n");
59 }
60 return 0;
61 }
原文地址:https://www.cnblogs.com/0803yijia/p/2364064.html