A + B Problem II
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 186305 Accepted Submission(s): 35531
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大数加法运算,加法是尾对齐的,用整型数组sum来存储结果,输入的整数以字符串形式存储。把每位数字对齐相加,此处注意s[i]是字符,要用s[i]-'0'转换成数字。注意进位的算法。代码如下:#include <iostream> #include <cstring> #define SIZE 1001 using namespace std; int main() { int T,k,i,j,l,m; int ls1,ls2; char s1[SIZE]; char s2[SIZE]; int sum[SIZE]={0}; cin>>T; for(i=0;i<T;i++) { cin>>s1>>s2; ls1=strlen(s1); ls2=strlen(s2); for(j=ls1-1,k=0;j>=0;j--) { sum[k++]=s1[j]-'0'; } for(j=ls2-1,k=0;j>=0;j--) { sum[k++]+=s2[j]-'0'; } if(ls1>ls2) l=ls1; else l=ls2; for(j=0;j<l;j++) { if(sum[j]>=10) { m=sum[j]/10; sum[j]-=m*10; sum[j+1]+=m; } if(sum[l-1]>=10) l++; } cout<<"Case "<<i+1<<":"<<endl; cout<<s1<<" + "<<s2<<" = "; for(j=l-1;j>=1;j--) { cout<<sum[j]; sum[j]=0; } cout<<sum[0]<<endl; if(i<T-1) cout<<endl; } return 0; }
本文介绍了一个名为“A+B Problem II”的编程题目,该题目要求计算两个大整数的和,并提供了一种使用字符串存储大数并通过逐位相加实现加法的方法。文中详细解释了如何处理进位以及如何正确输出结果。
1923

被折叠的 条评论
为什么被折叠?



