时间限制:1 秒

内存限制:32 兆

特殊判题:否

提交:6745

解决:2320

题目描述:

实现一个加法器,使其能够输出a+b的值。

输入:

输入包括两个数a和b,其中a和b的位数不超过1000位。

输出:

可能有多组测试数据,对于每组数据,

输出a+b的值。

样例输入:
2 6
10000000000000000000 10000000000000000000000000000000
样例输出:
8
10000000000010000000000000000000
来源:
2010年华中科技大学计算机研究生机试真题

思路:

大数加法,前缀补全0更容易计算。没必要一定转成字符串,也可转成数组。或者直接用字符计算,不转换成数字。

代码:

#include <stdio.h>
#include <string.h> #define N 1000 int main(void)
{
int i, k;
char s[N+1];
int a[N+1], b[N+1]; while (scanf("%s", s) != EOF)
{
k=0;
for (i=strlen(s)-1; i>=0; i--, k++)
a[k] = s[i]-48;
for (; k<N+1; k++)
a[k] = 0; scanf("%s", s);
k=0;
for (i=strlen(s)-1; i>=0; i--, k++)
b[k] = s[i]-48;
for (; k<N+1; k++)
b[k] = 0; for (i=0; i<N+1; i++)
{
a[i] += b[i];
if (a[i] >= 10)
{
a[i+1] ++;
a[i] %= 10;
}
} for (i=N; i>=0; i--)
{
if (a[i] != 0)
break;
}
if (i<0)
printf("0");
for (; i>=0; i--)
printf("%d", a[i]);
printf("\n");
} return 0;
}
/**************************************************************
Problem: 1198
User: liangrx06
Language: C
Result: Accepted
Time:130 ms
Memory:912 kb
****************************************************************/

05-16 19:20