A + B -2013编程之美全国测试赛 每日一练
Description:输入两个正整数A和B, 求A+B的值,其中测试分为小数据测试和大数据测试
Input:两个正整数A, B
Output:A+B的和
对于小数据, 0 < A, B <= 10; 对于大数据, 0 < A, B <= 10100
Sample Input
2 3
Sample Output
5
思路:
1.对于小数据A,B<=10,通常可以采用一个long int来表示(long int 为8字节,即64位可以保存1010以内的数据);然而对于大数据,则不能满足要求,这里需要采用字符串来保存输入 的A和B值,然后对字符串进行加法运算。
2.由于输入的数据是从高位到低位输入,加法运算则需要从低位向高位进行运算,此时可以将输入的数字字符串反转保存到整数数组中(也可直接保存在字符串中,只需注意字符和整数的转换关系即可)。
#include<iostream> #include<string> #include<cstring> using namespace std; const int N = 101; int A[N]; int B[N]; int main() { string strA, strB; memset(A,0,sizeof(A)); memset(B,0,sizeof(B)); cin>>strA>>strB; int lenA = strA.size(), lenB = strB.size(), i, sum = 0; int maxLen = lenA>lenB ? lenA:lenB; //字符串反转存入数组 for(i = 0; i < lenA; i++) { A[i] = strA[lenA - i-1] - '0'; } for(i = 0; i != lenB; i++) { B[i] = strB[lenB - i -1] - '0'; } //计算A+B,将计算后的结果保存到数组A中 for(i=0; i<maxLen; i++) { A[i] += B[i] + sum; sum = A[i]/10; A[i] %= 10; } if(sum > 0) cout<<sum; for(i=maxLen-1;i>=0; i--) cout<<A[i]; cout<<endl; return 0; }