当前位置:首页 > 未命名 > 正文内容

大数相乘

淙嶙8年前 (2018-07-25)未命名754
数学公式:AB X CD = AC (BC+AD) BD GitHub Logo
package com.dl.study.m1.d1;
import java.util.Scanner;
/**
 * Createdbymion2018/5/3.
 */
public class BigInteger {
    /**
     * 大数相乘基本思想,输入字符串,转成char数组,转成int数组。采用分治思想,每一位的相乘;<br>
     * 公式:AB*CD=AC(BC+AD)BD,然后从后到前满十进位(BD,(BC+AD),AC)。
     * 关键点:下标和相等的处于同一数量级【个位级,十位级,百位级。。。】。
     * @paramnum1
     * @paramnum2
     */
    public String multiply(String num1, String num2) {
        char[] c1 = num1.toCharArray();
        char[] c2 = num2.toCharArray();
        int[] result = new int[c1.length + c2.length - 1];
        int[] n1 = new int[c1.length];
        int[] n2 = new int[c2.length];
        for (int i = 0; i < c1.length; i++) {
            n1[i] = c1[i] - '0';
        }
        for (int i = 0; i < c2.length; i++) {
            n2[i] = c2[i] - '0';
        }
        for (int i = 0; i < n1.length; i++) {
            for (int j = 0; j < n2.length; j++) {
                result[i + j] += n1[i] * n2[j];
            }
        }
        for (int i = result.length - 1; i > 0; i--) {
            result[i - 1] += result[i] / 10;
            result[i] = result[i] % 10;
        }
        //输出
        StringBuilder builder = new StringBuilder(result.length);
        for (int i = 0; i < result.length; i++) {
            builder.append(String.valueOf(result[i]));
        }
        return builder.toString();
    }

    public static void main(String[] args) {
        BigInteger bm = new BigInteger();
        System.out.println("-----输入两个大数------");
        Scanner scanner = new Scanner(System.in);
        String num1 = scanner.next();
        String num2 = scanner.next();
        String result = bm.multiply(num1, num2);
        System.out.println("相乘结果为:" + result);
        scanner.close();
    }
}

相关文章

爬楼梯

爬楼梯

描述 在你面前有一个n阶的楼梯,你一步只能上1阶或2阶。请问计算出你可以采用多少种不同的方式爬完这个楼梯。 输入 一个正整数,表示这个楼梯一共有多少阶 输出 一个正整数,...

最长连续数列

最长连续数列

描述 输入一个乱序的连续数列,输出其中最长连续数列长度,要求算法复杂度为  O(n)  。 输入 54,55,300,12,56 输出 3 输入样例 100,4,...

Idea快捷键

Idea快捷键

Ctrl+Alt+左键/光标 进入方法对应的实现类 对应eclipse Ctrl + 左键Ctrl+Alt+b         &...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。