大整数加减运算的
C
语言实现
一
.
问题提出培训老师给出一个题目:用
C
语言实现一
个大整数计算器。初步要求支持大整数的加、减运算,例如
8888888888888+1112=8888888890000
或
1000000000000-999999999999=1
。
C
语言中,
整型变量所
能存储的最宽数据为
0xFFFF FFFF
,对应的无符号数为
4294967295
,
即无法保存超过
10
位的整数。
注意,
此处
'10
位
'
指数学中的
10
个数字,
并非计算机科学中的
10
比特。
浮
点类型
double
虽然可以存储更多位数的整数,但一方面常
数字面量宽度受编译器限制,另一方面通过浮点方式处理整
数精度较低。例如:
double a =
1377083362513770833626.0,
b=1585054852315850548524.0; printf('res = %.0f\n', a+b);
输出为
res = 2962138214829621510144
,而正确值应为
2962138214829621382150
。
既然基本数据类型无法表示大
整数,那么只能自己设计存储方式来实现大整数的表示和运
算。通常,输入的大整数为字符串形式。因此,常见的思路
是将大整数字符串转化为数组,再用数组模拟大整数的运算。
具体而言,先将字符串中的数字字符顺序存入一个较大的整
型数组,其元素代表整数的某一位或某几位
(
如万进制
)
;然
后根据运算规则操作数组元素,以模拟整数运算;最后,将