巨大数乘法(C语言)

上一篇博客我们实现了巨大数的加减法,现在我来填一下我上个博客结尾留下的坑——巨大数的乘法。
相较于加减法乘法的实现更加容易实现,我们可以类比十进制下的乘法来进行手工过程的实现。在这里插入图片描述
既然十进制的乘法是如此那么在万进制下的乘法也应是如此的,但是如何解决每次计算结果的存储问题呢,这个问题在我编程的时候困扰我了好久。
其实很简单,就是我们把每一轮(或者说每一次)的计算结果按万进制直接存入我们的结果巨大数的数组中就好了。
对了,最终结果巨大数的位数应该是两个相乘巨大数位数之和(在万进制下)。

下来我们看一下核心代码:

void multiInfor(HUGE_NUM *NUM1, HUGE_NUM *NUM2, HUGE_NUM *NUM3) {
	int i;
	int j;
	int count1 = (NUM1->count+3) / 4;
	int count2 = (NUM2->count+3) / 4;
	int temp;
	int cur;
	int next;
	NUM3->sign = NUM1->sign ^ NUM2->sign;
	for (i = 0; i < count1; i++) {
		for (j = 0; j < count2; j++) {
			temp = NUM1->value[i] * NUM2->value[j] + NUM3->value[i+j];
			cur = temp % 10000;
			next = temp / 10000;
			NUM3->value[i+j] = cur;
			NUM3->value[i+j+1] = next;
		}
	}
}

其他的代码与巨大数加减法的代码一样,需要的可以在我的上一篇博客中拿。
至此,巨大数的项目算是完了,至于小数与除法问题本人在时间和能力上还是有些欠缺暂时无法完全实现。
本项目的所有指导均来自于微易码的朱洪老师。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值