a+b (九度oj 题目60)

来源:互联网 发布:淘宝怎么虚假交易 编辑:程序博客网 时间:2024/04/29 21:09

前言

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

题目

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

ac代码

#include <stdio.h>#include <stdlib.h>#include <string.h> #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****************************************************************/


原创粉丝点击