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

大数相乘

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

相关文章

maven 常用命令汇总

maven 常用命令汇总

1. 编译源代码: mvn compile 2. 编译测试代码: mvn test-compile 3. 运行测试: mvn test 4. 产生site:...

RabbitMQ消费端如何配置性能高--解读SimpleMessageListennerContainer

RabbitMQ消费端如何配置性能高--解读SimpleMessageListennerContainer

SimpleMessageListenerContainer 是RabbitMQ的侦听容器。消费端的一些配置都在这里面(spring-rabbit通过xml的配置listener-container就...

MyBatis源码解读--从入口类SqlSessionFactoryBuilder出发

MyBatis源码解读--从入口类SqlSessionFactoryBuilder出发

先摘抄一段MyBatis官方文档代码: String resource = "org/mybatis/example/mybatis-config.xml"; InputStream inputStr...

发表评论

访客

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