九度OJ 1198:a+b (大数运算)

时间限制: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
****************************************************************/


posted on 2015-10-26 11:41  梁山伯  阅读(183)  评论(0编辑  收藏  举报

导航