a+b (九度oj 题目60)
前言
这个周末感冒,一直没写程序,拿到题练习一下,我很奇怪的是这道题只能用全局数组,传参总会出问题,gdb没有调试出来,太诡异了
题目
题目描述: 实现一个加法器,使其能够输出a+b的值。 输入: 输入包括两个数a和b,其中a和b的位数不超过1000位。 输出: 可能有多组测试数据,对于每组数据, 输出a+b的值。 样例输入: 2 6 10000000000000000000 10000000000000000000000000000000 样例输出: 8 10000000000010000000000000000000
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 ****************************************************************/