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

大数相乘

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

相关文章

dubbo XML配置(三)

dubbo XML配置(三)

配置之间的关系标签用途解释<dubbo:service/>服务配置用于暴露一个服务,定义服务的元信息,一个服务可以用多个协议暴露,一个服务也可以注册到多个注册中心<dubbo:ref...

Java的位运算符详解实例——与(&)、非(~)、或(|)、异或(^)

Java的位运算符详解实例——与(&)、非(~)、或(|)、异或(^)

位运算符主要针对二进制,它包括了:“与”、“非”、“或”、“异或”。从表面上看似乎有点像逻辑运算符,但逻辑运算符是针对两个关系运算符来进行逻辑运算,而位运算符主要针对两个二进制数的位进行逻辑运算。下面...

构建短字符串

构建短字符串

描述 给定任意一个较短的子串,和另一个较长的字符串,判断短的字符串是否能够由长字符串中的字符构建出来,且长串中的每个字符只能用一次。 输入 一行数据包括一个较短的字符串和一个较长的字...

发表评论

访客

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