A + B Problem II
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 212359 Accepted Submission(s): 40969
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//大数相加可转换为字符串代码:第一种:#include<stdio.h> #include<string.h> int main() { int t,n,m; int la,lb,p; int i,j; char a[1000],b[1000],c[1001]; scanf("%d",&t); for(j=1;j<=t;j++) { scanf("%s%s",a,b); printf("Case %d:\n",j); printf("%s + %s = ",a,b); la=strlen(a)-1; lb=strlen(b)-1; p=0; for(i=0;la>=0||lb>=0;i++,la--,lb--) { if(la>=0&&lb>=0) c[i]=a[la]+b[lb]-'0'+p; if(la>=0&&lb<0) c[i]=a[la]+p; if(lb>=0&&la<0) c[i]=b[lb]+p; p=0; if(c[i]>'9') { c[i]=c[i]-10; p=1; } } if(p==1) printf("1"); while(i--) printf("%c",c[i]); if(j<t) printf("\n\n"); else printf("\n"); } return 0; }
第二种:#include <stdio.h> #include <string.h> #define MAX 1010 int an1[MAX]; int an2[MAX]; char s1[MAX]; char s2[MAX]; int t,i,j,k; int main(void) { scanf("%d",&t); for(i=1;i<=t;i++) { scanf("%s", s1); scanf("%s", s2); memset( an1, 0, sizeof(an1)); memset( an2, 0, sizeof(an2)); int nLen1 = strlen( s1); for( j = 0, k = nLen1 - 1;k >= 0 ; k --) an1[j++] = s1[k] - '0'; int nLen2 = strlen(s2); for( j = 0, k = nLen2 - 1;k>= 0 ; k --) an2[j++] = s2[k] - '0'; for(k = 0;k < MAX ; k ++ ) { an1[k] += an2[k]; //逐位相加 if( an1[k] >= 10 ) { //看是否要进位 an1[k] -= 10; an1[k+1] ++; //进位 } } for( k = MAX; (k >= 0) && (an1[k] == 0);k -- ) ; printf("Case %d:\n", i); printf("%s + %s = ",s1,s2); if(k>=0) for( ; k >= 0; k--) printf("%d",an1[k]); if(i==t) printf("\n"); else printf("\n\n"); } return 0; }