一、引言
在C语言解决问题的过程中,我们常常会遇到一些问题需要进行大数处理。
这里定义的大数为位数达到几百位的整数。
通常做法是将大数转化为一维数组,再进行四则运算。
在四则运算中,除法的高效率实现最为困难。
本文即是针对这种高精度大数除法问题给出模板化的解答。
二、算法实现
(1)数据读入
首先,我们的思路是将大数转化为一维数组存储起来。但是,直接读入数组的话会产生一个问题。比如我们定义一个数组arr[1000],直接读入的话,大数的最高位会储存在下标为零的数组空间内,也就是arr[0]。这不符合我们对数字的自然逻辑,也会对之后的处理带来困难。所以在以下所涉及到的数字中,包括被除数、除数、商、余数这四个数,我们都采用反向读入的方式,也就是将个位储存在arr[0]中,将十位储存在arr[1]中,依次类推。
先定义数组
char beiChuShuStr[1004] = { 0 };
char chuShuStr[1004] = { 0 };
int beiChuShu[1004] = { 0 };
int chuShu[1004] = { 0 };
int shang[1004] = { 0 };
int yuShu[1004] = { 0 };
这里为什么多定义了两个字符串数组呢?
因为我们的处理思路是先将大数以字符串的形式读入,再进行反向赋值给数字数组
具体实现如下:
scanf("%s", beiChuShuStr);
scanf("%s", chuShuStr);
int len1 = strlen(beiChuShuStr);
int len2 = strlen(chuShuStr);
for (int i = 0; i < len1; i++) {//将字符串数组输入整形数组,调整顺序使得下标为零的元素
beiChuShu[i] = beiChuShuStr[len1 - 1 - i] - '0';//对应个位,下标为一的元素对应十位
}
for (int i = 0; i < len2; i++) {
chuShu[i] = chuShuStr[len2 - 1 - i] - '0';
}
如此以来我们的大数就成功储存了
同学们可