算法题——JAVA实现大数乘法

大致思路
输入的乘数存到字符串里,然后倒置(结果记得倒回来)。
第二位乘第一位和第一位乘第二位放入同一个位置。(以此类推)
在这里插入图片描述


/**

 * 分治法

 */

public class BigDecimal {

    // 以字符串的方式输入两个超大的整数,将两个数值相乘的结果计算出来

    public static void main(String[] args) {

        Scanner in = new Scanner(System.in);

        String a = in.next();

        String b = in.next();

        String result = multiply(a, b);

        System.out.println(result);

    }

    // 计算两个整数相乘

    // 实现该方法,不需要对参数做数值校验

    private static String multiply(String a, String b) {

        //用来存储结果

        StringBuilder ans = new StringBuilder();

        //反转两个大整数,以便从个位开始相乘

        StringBuilder a1 = new StringBuilder(a);

        StringBuilder b1 = new StringBuilder(b);

        a1.reverse();

        b1.reverse();

        //用来存储中间计算的结果

        int[] arr = new int[a1.length() + b1.length()];

        //开始相乘,从两个大整数的个位开始,也就是反转后的第一位

        for(int i = 0; i < a1.length(); i++){

            //b的每一位与a的第i为乘积,每循环乘b每一位一次,a移动一位

            for(int j =0; j < b1.length();j++){

                //这里是关键!!!,这里构成了错位相加,进而保存了结果中每一位的累加和,这里数字的字符与‘0’字符相减等于数字本身

                arr[i+j] += (a1.charAt(i) - '0') * (b1.charAt(j) - '0');

            }

        }

        //给每一位大于十的进位,保留余数

        for(int i = 0; i < arr.length - 1; i++){

            arr[i+1] += arr[i] / 10;

            arr[i] %= 10;

        }

        //把结果放到答案集里面去

        for(int i = 0; i < arr.length - 1; i++){

            ans.append(arr[i]);

        }

 
        return ans.reverse().toString();

    }

}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值