美文网首页
大整数乘法

大整数乘法

作者: 王剑_a9e1 | 来源:发表于2018-11-14 01:17 被阅读0次

模拟乘法累加 - 改进

例如:计算98×21,步骤如下

        9  8
×       2  1
-------------
       (9)(8)  <---- 第1趟: 98×1的每一位结果 
  (18)(16)     <---- 第2趟: 98×2的每一位结果 
-------------
  (18)(25)(8)  <---- 这里就是相对位的和,还没有累加进位

这里唯一要注意的便是进位问题,我们可以先不考虑进位,当所有位对应相加,产生结果之后,再考虑。从右向左依次累加,如果该位的数字大于10,那么我们用取余运算,在该位上只保留取余后的个位数,而将十位数进位(通过模运算得到)累加到高位便可,循环直到累加完毕。

核心代码如下:

/**
 * 大数相乘方法二
 */
public static int[] bigNumberMultiply2(int[] num1, int[] num2){
    // 分配一个空间,用来存储运算的结果,num1长的数 * num2长的数,结果不会超过num1+num2长
    int[] result = new int[num1.length + num2.length];

    // 先不考虑进位问题,根据竖式的乘法运算,num1的第i位与num2的第j位相乘,结果应该存放在结果的第i+j位上
    for (int i = 0; i < num1.length; i++){
        for (int j = 0; j < num2.length; j++){
            result[i + j + 1] += num1[i] * num2[j];  // (因为进位的问题,最终放置到第i+j+1位)
        }
    }

    //单独处理进位
    for(int k = result.length-1; k > 0; k--){
        if(result[k] > 10){
            result[k - 1] += result[k] / 10;
            result[k] %= 10;
        }
    }
    return result;
}

相关文章

  • 大整数乘法

    模拟乘法累加 - 改进 例如:计算98×21,步骤如下 这里唯一要注意的便是进位问题,我们可以先不考虑进位,当所有...

  • 2980大整数乘法

    一次就ac了, 开心

  • 大整数的乘法

    将n位二进制整数X和Y都分为2段,每段的长为n/2位(为叙述简单,假设n是2的幂) 由此, 这样,X和Y的乘积为 ...

  • 分治法 Divide and Conquer

    解决的最轻,最重,矩阵乘法,大整数乘法以及排序(快速排序,归并算法)。快速傅立叶变换,Karatsuba乘法算法 ...

  • 大整数乘法(.net代码)

    今天部门面试一个人,面试官给来面试的人除了一道题:大整数乘法;面试结果弄得我们术面试官有点怀疑人生了,顺手就抓...

  • 0024-大整数乘法

    问题描述 求两个不超过 200 位的非负整数的积。 输入 有两行,每行是一个不超过 200 位的非负整数,没有多余...

  • Karatsuba 大整数乘法算法

    我们平时接触的长乘法,按位相乘,是一种时间复杂度为 O(n ^ 2) 的算法。今天,我们来介绍一种,时间复杂度为 ...

  • 高精度数(大整数)乘法

    大整数乘法 上一期(高精度加法)今天我们来研讨一下高精度乘法。 题目描述:将两个大整数(最多100位)相乘,输出结...

  • 2021-09-10,乘法运算定律推广到小数

    乘法运算定律推广到小数 整数乘法的三大定律——交换律、结合律、分配律在小数乘法中同样适用。理...

  • c/c++大整数乘法

    Description 求两个不超过200位的非负整数的积。 Input 有两行,每行是一个不超过200位的非负整...

网友评论

      本文标题:大整数乘法

      本文链接:https://www.haomeiwen.com/subject/enarfqtx.html