杭电OJ1002

来源:互联网 发布:大连淘车网络和中软卓 编辑:程序博客网 时间:2024/06/06 22:33

A + B Problem II

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


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
21 2112233445566778899 998877665544332211
 

Sample Output
Case 1:1 + 2 = 3Case 2:112233445566778899 + 998877665544332211 = 1111111111111111110
 

Author
Ignatius.L
 



额。。你们可能不翻译这个题目的意思。。我翻译一下,先输入一个T,代表测试的数据组数,1《T《20,接下来输入两个整数,为A+B,算出A+B的值再进行输出,加法谁不会嘛,是吧,主要问题测试数据很大,int,long long int 也不够,1000的长度的数字,所以这题啊,用普通的变量是不能解决的,我能想到的办法就是用数组了。我们可以模拟人脑的加法来对这两个数字进行相加。

代码:

#include<stdio.h>#include<stdlib.h>#include<string.h>#include<math.h>int main(){int n;scanf("%d",&n);int i;for(i=1;i<=n;i++){char a[1000+100]={0};    char b[1000+100]={0};int sum[10000]={0};scanf("%s",a+1);                        //数字Ascanf("%s",b+1);                       //数字Bint lena=strlen(a+1);                  //这里a+1主要是为了方便计算,不加也没问题,不过不加的话后面程序也要改一下。int lenb=strlen(b+1);                  //同理int i1=lena,i2=lenb;int sum_=0; while(i1>0 && i2>0)                  //两个数字进行相加 { sum[sum_]+=a[i1]+b[i2]-96; while(sum[sum_]>9) { sum[sum_+1]=sum[sum_+1]+1; sum[sum_]=sum[sum_]-10; } i1--; i2--; sum_++; } while(i1>0)           //注意这里是当两个数字位数不一样的,时候一个数已经加完了,还剩另一个数有几位没加完,我们把剩下的数字也加完 { sum[sum_]+=a[i1]-48; while(sum[sum_]>9) { sum[sum_+1]=sum[sum_+1]+1; sum[sum_]=sum[sum_]-10; } i1--; sum_++; } while(i2>0) {sum[sum_]+=b[i2]-48;while(sum[sum_]>9) { sum[sum_+1]=sum[sum_+1]+1; sum[sum_]=sum[sum_]-10; } i2--; sum_++; } printf("Case %d:\n",i); printf("%s + %s = ",a+1,b+1);  int max; if(sum[sum_]!=0)                   //判断最高位有没有进上去,有的话就输出最高位后一位的位置的值 printf("%d",sum[sum_]);for(max=sum_-1;max>=0;max--)printf("%d",sum[max]);if(i!=n)                     //这里注意格式,还有测试数据的时候我们要输出两个\n,因为它要测试数据之间有一个空行{printf("\n");printf("\n");}else                         //没有测试数据了,换行结束printf("\n"); }return 0;}


0 0