杭电oj-1002-A+B Problem
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. <br />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 <br />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
问题分析
此题是有一定难度的,其难点在于,如何表示当有1000位数的数字,因为就算是long long 型也是无法表达这么大的数字的(long long 是能表示出最大的数字的数据类型,其范围为9223372036854775807 ~ -9223372036854775808),因此应考虑采用数组进行存储,把我们输入的数转换成字符串,再将其转换为整数,另外,在本题中要注意相加的几种情况,
第一种,A.length==B.length
第二种,A.length>B.length
第三种,A.length<B.length
对于每种情况应该如何考虑,最后要注意题中所给的输入、输出格式。
Code:
#include<iostream> #include<string> #include<cstdio> using namespace std; string a,b; int sum[1005],q;//q为相加之后的位数 void add2(string a,string b) { /*两个大数相加求和*/ int m,n,t=0,i=0,int_a,int_b; //t为进位数 m=a.length()-1; n=b.length()-1; while(m>=0&&n>=0){ int_a=a[m]-'0';//将输入的每一位数先转换成int型 int_b=b[n]-'0'; sum[i]=(int_a+int_b+t)%10;//相加后第i位的数字 t=(int_a+int_b+t)/10;//相加后向上一位进的位数 i++; m--; n--; } if(m>n){ while(m>=0){ int_a=a[m]-'0'; sum[i]=(int_a+t)%10; t=(int_a+t)/10; m--; i++; } } if(m<n){ while(n>=0){ int_b=b[n]-'0'; sum[i]=(int_b+t)%10; t=(int_b+t)/10; n--; i++; } } q=i-1; if(t>=1)//最后一次相加存在进位时 { sum[i]=t; q=i; } } void output() { /*输出函数*/ int i=q; cout<<a<<" + "<<b<<" = "; for(;i>=0;i--){ cout<<sum[i]; } cout<<endl; } int main() { int n;//测试用例数 cin>>n; int i=0; for(; i<n; i++) { cin>>a>>b; add2(a,b); printf("Case %d:\n",i+1);//测试样例格式 output(); if(i<n-1) cout<<endl; } return 0; }