ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

C++实现大数相乘算法

2026/8/20 19:14:26 拓冰建站 浏览量
C++实现大数相乘算法 本文实例为大家分享了C实现大数相乘的具体代码供大家参考具体内容如下首先说一下乘法计算的算法同样是模拟人工计算时的方法。从低位向高位乘在竖式计算中我们是将乘数第一位与被乘数的每一位相乘记录结果之后用第二位相乘记录结果并且左移一位以此类推直到计算完最后一位再将各项结果相加得出最后结果。计算的过程基本上和小学生列竖式做乘法相同。为编程方便并不急于处理进位而将进位问题留待最后统一处理。我们以125*53为例来说明计算过程1、先算125*33*5得到15个13*2得到6个103*1得到3个100下面是存储结果的数组的形式2、接下来算125*55*5得到25个102*5得到10个1005*1得到5个10003、乘法过程完毕。接下来从 a[0]开始向高位逐位处理进位问题。a[0]留下5把1 加到a[1]上a[1]变为32 后应留下2把3 加到a[2]上……最终使得a里的每个元素都是1 位数结果就算出来了结果就是6625。总结一个规律即一个数的第i 位和另一个数的第j 位相乘所得的数一定是要累加到结果的第ij 位上。这里i j 都是从右往左从0 开始数。即ans[ij] a[i]*b[j];另外进位时要处理当前的值加上进位的值再看本位数字是否又有进位前导清零。下面是C代码实现12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061#includeiostream#includestring#includecstdiousingnamespacestd;#define MAX 1010intmain(){string std1, std2;cinstd1std2;intlength1 std1.length();intlength2 std2.length();inta[MAX] {0};intb[MAX] {0};intresult[2 * MAX] {0};inti 0, j 0;//将字符串转移到数组中以方便计算 注意是倒叙存储//即字符串123存为321为的是将低位放在前面方便计算for(i length1 - 1, j 0; i 0; i--, j){a[j] std1[i] -0;}for(i length2 - 1, j 0; i 0; i--, j){b[j] std2[i] -0;}//将结果储存在 resullt中result[i j] a[i] * b[j]是关键算法for(i 0; i length1; i){for(j 0; j length2; j){result[i j] a[i] * b[j];}}//从低位到高位进行进位for(i 0; i (length1length2); i){if(result[i] 9){result[i1] result[i]/10;result[i] % 10;}}//将前导0全部剔掉比如我们结果是236在result中//是这样存储的63200……我们需要定位到第一个不为零的数它的位置也就是i 两数相乘位数最多是两数位数之和for(i length1 lengrh2; i 0 ; i--){if(result[i] 0)continue;elsebreak;}//接着i继续输出就是我们的结果for(; i 0; i--)coutresult[i];return0;}以上就是本文的全部内容希望对大家的学习有所帮助