杭电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
- 杭电oj1002解题
- 杭电OJ1002
- 杭电OJ1002
- 杭电OJ1002
- 杭电oj1002,简单理解,复杂解法
- 菜鸟上路,杭电OJ1002之大数相加
- OJ1002
- 北大OJ1002
- zzuli-oj1002
- 九度OJ1002
- 九度oj1002
- 百炼OJ1002
- OJ1002 C语言版
- 九度oj1002题
- 杭电
- 杭电
- 杭电
- 杭电 1234 和 杭电 2115
- 1009. 说反话 (20)-PAT乙级
- lintcode 173 链表插入排序
- ESB v6.6中新版本构件库XMLDatabaseUtil不支持中文
- 1005. Spell It Right (20)
- Android优化之插件开发(动态加载Apk)
- 杭电OJ1002
- mybatis逆向工程使用方法
- 记一次Android系统下解决音频UnderRun问题的过程
- 关于随机函数rand()的使用
- python 正则表达式,函数说明
- Git常用命令
- 电路原理实验一
- 【快捷键】—— 键盘篇
- Fragment 显示隐藏回调