美文网首页
高精度乘法

高精度乘法

作者: gattonero | 来源:发表于2019-03-10 14:58 被阅读0次

问题

适用于1000位以内数的乘法

思路

注意两点:

  • 数字是通过字符串传过来的,字符串的低位反而是数字的高位,所以我们要从数字的低位开始计算的话,必须反转字符串(当然结果也要反转)
  • 原理就是小学乘法,竖式计算,但不需要每次都计算进位,可以统一计算

解决

    public String multi(String a, String b){
        ////反转字符串
        char[] ar = reverse(a).toCharArray(), br = reverse(b).toCharArray();

        int res[] = new int[1000];
        int max = ar.length + br.length-1;//m位数乘n位数,结果至少是m+n-1位

        for (int i = 0; i <max; i++) {
            for (int j = 0;  i < ar.length && j < br.length; j++) {
                res[i + j] += (ar[i] - 48)*(br[j] - 48);
            }

            if (res[i] >= 10) {
                res[i+1] += res[i]/10;
                res[i] %= 10;
                max= Math.max(max, i+2);//结果最多是m+n位,+2是因为i是从0开始的下标,m是从1开始的位数
            }
        }

        
        StringBuilder ans = new StringBuilder();
        for (int i = 0;i<max; i++) {
            ans.append((char)(res[i]+48));
        }

        //反转结果
        return ans.reverse().toString();
    }

    public String reverse(String s){
        return new StringBuilder(s).reverse().toString();
    }

Ref

https://oi-wiki.org/math/bignum/

相关文章

  • 高精度(加法&乘法&减法)

    高精度加法: 高精度乘法: 高精度减法:

  • 17-12-8版子

    高精度加法 高精度乘法 快速乘法 二分匹配 阶乘长度(Stirling公式) 并查集 树状数组 树状数组的逆序数 ...

  • 高精度乘法

    【例】高精度乘法。输入两个正整数,求它们的积。【算法分析】类似加法,可以用竖式求乘法。在做乘法运算时,同样也有进位...

  • 高精度乘法

    问题 适用于1000位以内数的乘法 思路 注意两点: 数字是通过字符串传过来的,字符串的低位反而是数字的高位,所以...

  • 几个高精度模板

    模板来自洛谷及Acwing:Acwing洛谷 后续增加注释以及相关代码改进 高精度加法 高精度减法 高精度乘法 高...

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

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

  • 上交OJ-1015. 高精度乘法

    1015. 高精度乘法 Description 输入2个整数a和b,输出a*b。 Input Format 输入有...

  • 46 简单高精度乘法

    铐住修罗王和邪狼的魔法手铐镌刻着两行数字,修罗王猜测其开启密码是这两行数字的乘积,为此他需要编写一个简单高精度乘法...

  • noip模板整理

    数论快速幂高精度加法减法乘法除法线性筛素数埃氏筛法 O(nlglgn)最大公约数(gcd)最小公倍数(lcm)扩展...

  • PHP算术及精度计算

    一、高精度算术运算符 bcadd 将两个高精度数字相加bccomp 比较两个高精度数字,返...

网友评论

      本文标题:高精度乘法

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