前一阵子因为洛谷的一道阶数和的题目,学习了大整数
我选择了题解中c语言里面只用到了stdio.h的库的解析,这里我选择自己重打一份,来表示自己的理解,以下是大整数加法,大整数运算的最基本模块,我看到的大部分的大整数运算都是利用了数组的特性来解决的。以下是我自己重写的大整数加法模型:
#include <stdio.h>
int main(){
int A, B, a[114]={0}, b[114]={0};
//其中的114是大整数的最大数位,可以根据需要更改
A = 114;B = 514;//示例,输出应该是628
//scanf("%d %d",&A,&B);
//第一次循环用于对第一个数A进行分位,
根据需要应该加上进位模块,下面介绍b[]的
时候会介绍到
int i = 0;
while (A > 0) {
a[i] = A % 10;
A /= 10;
i++;
}
//第二次循环类似,对B分位
i = 0;
while (B > 0) {
b[i] = B % 10;
B /= 10;
i++;
}
//进位模块,当一个单元>9时,会把他的十
位数输出给下一位求和,由于个位数的乘积
不会是三位数,因此不用考虑>99的情况
for (i=0; i <113; i++) {
b[i] += a[i];
if (b[i] > 9) {
b[i + 1] += b[i] / 10;
b[i]=b[i]%10;
}
}
//判断0模块,这里的单元是到位输出,
因此需要排除是0的单元
while(i>0){
if (b[i] == 0)
i--;
else
break;
}
//排除了前面的0的单元后,后续输出出
来的就是答案要求数字了
while(i>=0) {
printf("%d", b[i]);
i--;
}
return 0;
}
由于c中数组的定义不能使用变量来描述数组的大小 ,里面的114和114-1看语言需要换成n和n-1就行,毕竟基本所有语言都有数组功能