C语言高精度大数除法的算法实现(附有实战案例)

一、引言

在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';
}

如此以来我们的大数就成功储存了

同学们可

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

飞猪0_0

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值