大侠帮我看一下代码
c语言大数加法问题老板要求你和 Tom 一起编写一个可以进行大数(不超过500位数字)四则运算的计算器。很显然,这样的大数已经无法用 C 语言中的常规变量直接表示,而你们必须要实现高精度计算的算法。
考虑到加法是各种运算的基础,你们决定从加法开始写起。你和 Tom 进行了分工,他负责编写程序的主函数,而你要编写 add 和 revnum 两个子函数。你们约定了函数的接口如下:
void add(char a[], char b[], char r[]);其中,a 表示被加数、b 表示 加数,而 r 中应当存放 a 和 b 两个函数的和。这三个数字都是使用字符数组来表示的,该大数的各位数字的字符由低至高存储在数组中。譬如被加数 a 为 6894 时,
a[0] = '4', a[1] = '9', a[2] = '8', a[3] = '6', a[4...500] = '\0'为了将数字由高位在前的存储方式转变为低位在前的存储方式,方便模拟加法的计算,Tom 请你再编写一个 revnum 函数,该函数的接口如下:
void revnum(char *num);这个函数应当可以把字符数组 num 中存储的字符颠倒,即把 "1234" 转换成 "4321",参数 num 是一个以 '\0' 结尾的字符串。
输入
该程序的输入包括 n (n >= 0) 对大数,每对大数一行,两个大数之间以空白符分割。
输出
针对每一对大数,输出运算结果。
注意
程序的主函数Tom已经编写好,你只需提交编写好的两个子函数即可。
问题补充:预设代码如下
/* PRESET CODE BEGIN - NEVER TOUCH CODE BELOW */
#include <stdio.h>
#include <string.h>
void revnum(char *num);
void add(char a[], char b[], char c[]);
int main()
{
char a[501], b[501], r[501];
int n;
for(;;) {
memset(a, 0, sizeof(a));
memset(b, 0, sizeof(b));
memset(r, 0, sizeof(r));
n = scanf("%s %s\n", a, b);
if (n != 2) break;
revnum(a);
revnum(b);
add(a, b, r);
revnum(r);
printf("%s\n", r);
}
return 0;
}
/* PRESET CODE END - NEVER TOUCH CODE ABOVE*/