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