大数乘——“万进制”

本文介绍了一种利用‘万进制’优化大数乘法的方法,通过将大数每四位一组,减少内存占用和运算次数。以174596332 * 15为例,采用万进制处理进位,实现更高效的计算过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

网上看到了一种“万进制”的思路,时间、空间上都能节省。

这种思路就是充分利用int类型所能存数的范围,如果之前写大数乘,我是将每一位放在int数组的每个元素,比如:174596332,放在数组中为
int a[] = {1,7,4,5,6,3,3,2} ;
然后拿数组每个元素从低位到高位乘另一个数,处理进位。

“万进制”不以一位(十进制)分割数了,而是4位,那么上面的数在数组中就可以存为:int a[] = {6332,1745};
然后以万进制去处理每个数乘后的进位。
比如:174596332 * 15
可以处理为:a[0] * 15 = 6332*15 = 94980,进位9,a[0]=4980
1745 * 15 = 26175,再加低为进位得到26184,再进位2,a[1]=6184
然后a[2] = 2,最终乘积结果为261844980。

实际只要了解思路后,也可以扩展“十万进制”甚至更大的进制,更进一步节省内存,减少运算次数。

//
#include<iostream>
#include<cstdio>
using namespace std;
int Mul(int res[],int num,int len)
{
   
   
 	int jw = 0;
 	
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值