a+b (九度oj 题目60)

前言

这个周末感冒,一直没写程序,拿到题练习一下,我很奇怪的是这道题只能用全局数组,传参总会出问题,gdb没有调试出来,太诡异了

题目

题目描述:
实现一个加法器,使其能够输出a+b的值。
输入:
输入包括两个数a和b,其中a和b的位数不超过1000位。
输出:
可能有多组测试数据,对于每组数据,
输出a+b的值。
样例输入:
2 6
10000000000000000000 10000000000000000000000000000000
样例输出:
8
10000000000010000000000000000000

ac代码

#include 
#include 
#include 
 
#define MAX 1002
 
 
char a[MAX], b[MAX], sum[MAX];
 
void bigDataPlus();
 
int main()
{
    while(scanf("%s %s", a, b) != EOF)
    {
        bigDataPlus();
        printf("%s\n", sum);
    }
 
    return 0;
}
 
 
void bigDataPlus()
{
    int i, j, k, c, len_a, len_b;
 
    //初始化
    memset(sum, 0, sizeof(sum));
    len_a = strlen(a);
    len_b = strlen(b);
     
    //进位标识
    c = 0;
 
    for(i = len_a - 1, j = len_b - 1, k = 0; i >=0 && j >= 0; i --, j --, k ++)
    {
        sum[k] = a[i] + b[j] + c - '0';
         
        if(sum[k] > '9')
        {
            c = 1;
            sum[k] -= 10;
        }else
        {
            c = 0;
        }
    }
     
    //a > b
    while(i >= 0)
    {
        sum[k] = a[i] + c;
        if(sum[k] > '9')
        {
            sum[k] -= 10;
            c = 1;
        }else
        {
            c = 0;
        }
        k ++;
        i --;
    }
 
    //b > a
    while(j >= 0)
    {
        sum[k] = b[j] + c;
        if(sum[k] > '9')
        {
            sum[k] -= 10;
            c = 1;
        }else
        {
            c = 0;
        }
        k ++;
        j --;
    }
     
    //最后是否有进位的情况
    if(c == 1)
    {
        sum[k ++] = '1';
    }
 
    //翻转
    char temp;
    for(i = 0, j = k - 1; i < j; i ++, j --)
    {
        temp = sum[i];
        sum[i] = sum[j];
        sum[j] = temp;
    }
 
}
/**************************************************************
    Problem: 1198
    User: wangzhengyi
    Language: C
    Result: Accepted
    Time:30 ms
    Memory:912 kb
****************************************************************/


你可能感兴趣的:(ACM,C/C++)