大数减法运算
第一次在CSDN写博客,督促自己不断学习、巩固和进步,希望能和大家一起成长~
在编程实现整数运算时,作为程序猿/媛,我们知道计算机中的int、long或者long long的所占的内存空间是有限的,当整数超过一定大小,这些类型就无法表示整数的值,否则数据会被“截断”,无法得到正确的结果。
那么,该如何实现大数运算呢?刚开始我也是如此的疑惑,但稍加思索,你很快可以想到最简单的方法——使用int数组(或者char数组,既满足要求,又可节省空间)来进行运算。假设有两个大数,char *s1 = "4543636436274354646", char *s2 = "456360989", 我们可以取出每一位的值,放到int数组。
值得注意的是,char *中低地址存放的是高位的数字字符,而运算中我们需要将低位对齐,所以首先将字符串的字符逆序存入数组中, 个位数是数组第一个元素:
int idx, len1, len2, *array1, *array2;
len1 = strlen(s1);
array1 = (int *)calloc(len1, sizeof(int));
for (idx = 0; idx < len1; idx++)
{
array1[idx] = s1[len1 - 1 - idx] - '0';
}
照此将s2的数字存到array2中,简单起见,这里假设array1表示的数字大于等于array2表示的数值。接着就是按照减法的定义,被减数当前位小于减数,则向高位借1,自身加10,逻辑如下:
for (idx = 0; idx < len2; idx++) {
if (array1[idx] < array2[idx]) {