网上看到了一种“万进制”的思路,时间、空间上都能节省。
这种思路就是充分利用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;