问题描述:求两个不超过200为的非负整数的和
输入数据:输入有两行,每行是一个不超过200位的非负整数,没有多于的前导0.
输出要求:输出只一行,即相加后的结果。结果里不能有多于的前导0,即如果结果是342,那么就不能输出0342.
输入样例:
2222222222222222222222222
3333333333333333333333333
输出样例:
5555555555555555555555555
这道题用字符数组就可以很好避免int double类型的溢出问题
#include<iostream>
#include<string>
using namespace std;
string add(string a, string b)
{
string c;
int value = 0;
reverse(a.begin(), a.end());
reverse(b.begin(), b.end());
a.size() > b.size() ? c = a : c = b;
for (int i = 0; c[i]!='\0'; i++)
{
int z = 0,x=0;
if (i < a.size())
{
z = a[i] - '0';
}
if (i < b.size())
{
x = b[i] - '0';
}
if (x + z + value>= 10)
{
c[i] = (x + z - 10+value)+'0';
value = 1;
}
else
{
c[i] = (x + z+value) + '0';
value = 0;
}
}
if(value == 1)
c.push_back('1');
reverse(c.begin(), c.end());
return c;
}
int main()
{
string a, b;
while (cin >> a >> b)
{
string c = add(a, b);
cout << c;
}
}