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

大数相乘

淙嶙7年前 (2018-07-25)未命名607
数学公式: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();
    }
}

相关文章

关于java.lang.UnsupportedOperationException异常

关于java.lang.UnsupportedOperationException异常

在调用Arrays.asList()方法时把一个数组转化成List列表时,对得到的List列表进行add()和remove()操作时出现java.lang.UnsupportedOperationEx...

最长连续数列

最长连续数列

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

...

发表评论

访客

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