这题明明很水,机试指南却写得那么复杂。。。
题目描述:
实现一个加法器,使其能够输出a+b的值。
输入:
输入包括两个数a和b,其中a和b的位数不超过1000位。
输出:
可能有多组测试数据,对于每组数据,
输出a+b的值。
样例输入:
2 6
10000000000000000000 10000000000000000000000000000000
样例输出:
8
10000000000010000000000000000000
代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct bigint
{
int digit[1010];
int size;
bigint operator + (const bigint &b) const
{
int length = (size >= b.size) ? size : b.size;
int carry = 0;
bigint ans;
memset(ans.digit,0,sizeof(ans.digit));
ans.size = 0;
for(int i = 0; i < length; i++)
{
int t = digit[i] + b.digit[i] + carry;
carry = t / 10;
ans.digit[ans.size++] = t % 10;
}
if(carry > 0)
ans.digit[ans.size++] = carry;
return ans;
}
};
bigint chartoint(char str[])
{
int len = strlen(str);
bigint buf;
memset(buf.digit,0,sizeof(buf.digit));
buf.size = 0;
for(int i = len-1; i >= 0; i--)
{
buf.digit[buf.size++] = str[i] - '0';
}
return buf;
}
int main()
{
char str1[1010],str2[1010];
while(scanf("%s%s",str1,str2) != EOF)
{
bigint a = chartoint(str1);
bigint b = chartoint(str2);
bigint c = a + b;
for(int i = c.size-1; i >= 0; i--)
printf("%d",c.digit[i]);
printf("\n");
}
return 0;
}