HDOJ 1002 Sum Problem
题目
题意
每行两数,求和
难点
大数求和
题解
由于数字很大可用字符串储存
模拟逐位运算即可
这里有一个技巧
- 字符串逐位相加时如果位数不同,相加时比较麻烦
- 所以将短的字符串用’0’补齐相加就会方便许多
代码
#include <iostream>
#include <string>
using namespace std;
string add(string & a,string & b);
int main()
{
int t;
string s1,s2;
cin >> t;
for(int i = 1;i <= t;i++)
{
cin >> s1;
cin >> s2;
s1 = add(s1,s2);
cout << "Case " << i << ":" << endl;
cout << s1 << endl;
}
return 0;
}
string add(string & a,string & b)
{
// cout << a << endl << b << endl;
string s;
int t,c = 0;
if(a.length() < b.length())
swap(a,b);
for(int i = b.length();i < a.length();i++)
b.insert(0,"0");
for(int i = 0;i < a.length();i++)
s += '0';
for(int i = a.length()-1;i >= 0;i--)
{
t = (a[i] - '0') + (b[i] - '0') + c;
s[i] = t % 10 + '0';
c = t / 10;
}
if(c)
{
string a;
a += ('0' + c);
s.insert(0,a);
}
// cout << s << endl;
return s;
}