题目
源地址:
http://poj.org/problem?id=1504
理解
同样是长长的题目,其实是要求把数字从左到右相加,本质是要用字符数组模拟加法。当然,用java会更快一点,不过这次选择了用C++来写。姿势不是很优美,代码太丑陋了,应该有更优美的写法。
代码
#include <iostream>
#include <string>
#include <cstdio>
using namespace std;
int n;
string a, b;
char c[100];
int i;
int ans;
int main(int argc, char const *argv[])
{
cin >> n;
while (n--)
{
cin >> a >> b;
if (a.length() < b.length()) a.swap(b);
for (i = 0; i < a.length() + 1; i++) c[i] = '0';
ans = 0;
for (i = 0; i < b.length(); i++)
{
c[i] += a[i] + b[i] - 3 * '0';
if (c[i] >= 10)
{
c[i + 1]++;
c[i] = c[i] - 10 + '0';
}
else
c[i] = c[i] + '0';
}
for (i = b.length(); i < a.length(); i++)
{
c[i] += a[i] - 2 * '0';
if (c[i] >= 10)
{
c[i + 1]++;
c[i] = c[i] - 10 + '0';
}
else
c[i] = c[i] + '0';
}
for (i = 0; i <= a.length(); i++)
{
ans = ans * 10 + c[i] - '0';
}
if (ans % 10 == 0) ans /= 10;
printf("%d\n", ans);
}
return 0;
}
更新日志
- 2014年07月25日 已AC。