A + B Problem II
来源:互联网 发布:linux 创建用户脚本 编辑:程序博客网 时间:2024/05/16 10:56
HDU 1002 :*A + B Problem II*
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
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 998877665544332211Sample Output
Case 1:
1 + 2 = 3Case 2:
112233445566778899 + 998877665544332211 = 1111111111111111110
本题题意:
本题意思是给你两个数要你计算两数之和。不过这题是大数加法问题。
解题思路:
这是大数的加法问题,用字符数组来存储大数,然后转化为整形数组来计算即可。
代码:
#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>#include <queue>#include <sstream>#define max(a,b) a>b?a:busing namespace std;const int Max=1000;void getDigits(int num[],char str[])///把字符串保存在int类型的数组中{ char digit; int len=strlen(str); for(int i=0; i<len; ++i) { digit=str[i]; num[len-i-1]=digit-'0';///字符串倒序保存 }}void add(int a[],int b[],int sum[]){ for(int i=0; i<Max; i++) { sum[i]=a[i]+b[i]; } ///将十位以上的数字向上进位,将剩余的数字保存在自己的位置上 for(int i=0; i<Max; i++) { sum[i+1]+=sum[i]/10; sum[i]=sum[i]%10; }}int main(){ char num1[Max],num2[Max]; int a[Max]; int b[Max]; int sum[Max*2]; int n,m; cin>>n; for(m=1; m<=n; m++) { scanf("%s%s",&num1,&num2); getchar(); memset(a,0,sizeof(a)); memset(b,0,sizeof(b)); memset(sum,0,sizeof(sum)); getDigits(a,num1); getDigits(b,num2); add(a,b,sum); int j=Max*2-1;0 while(sum[j]==0) { j--; } cout<<"Case "<<m<<":"<<endl; cout<<num1<<" + "<<num2<<" = "; for(int i=j; i>=0; i--) { printf("%d",sum[i]); } printf("\n"); if(m!=n) printf("\n"); } return 0;}
- A + B Problem II
- A + B Problem II
- A + B problem II
- A + B Problem II
- A + B Problem II
- A + B Problem II
- A + B Problem II
- A + B Problem II
- A + B Problem II
- A + B Problem II
- A + B Problem II
- A+B Problem II
- A+B problem II
- A*B Problem II
- A + B Problem II
- A + B Problem II
- A + B Problem II
- A + B Problem II
- Python list之append和extend的区别
- 日本咖啡馆推出AR体验,在三次元邂逅初音未来
- flume之Taildir Source支持变化追加文件的日志收集
- 可编辑div的使用,实现类似textarea功能
- android 6.0和7.0开发中应该注意的问题
- A + B Problem II
- PCIe学习笔记(22)--- 中断(3)---MSI-X
- solidworks镜像特征
- Linux下安装jdk步骤详述
- 只是喜欢而已,请不要记得我
- 解决 ImportError: No module named 'serial' 问题
- lsyncd实时同步搭建指南——取代rsync+inotify
- caffe 人脸特征提取并计算相似度
- DB2备份与恢复