博客
关于我
牛客网-大数相乘
阅读量:208 次
发布时间:2019-02-28

本文共 1942 字,大约阅读时间需要 6 分钟。

为了将两个非常大的大整数用字符串表示相乘并返回结果,我们可以使用字符串模拟大整数相乘的方法。这种方法避免了直接处理大整数可能带来的性能问题,并且适用于非常大的数字。

方法思路

  • 初始化结果数组:创建一个足够大的数组来保存乘积的每一位。数组的长度等于两个输入字符串的长度之和。
  • 双重循环处理每一位:从右到左处理每一位,先处理较大的数的每一位,然后再处理较小的数的每一位。每次处理两个数字相乘,并加上从低位传来的进位。
  • 处理进位:在每一步计算乘积后,检查是否需要进位。如果有进位,则将其保存到更高的位上。
  • 处理剩余进位:在双重循环完成后,可能还有进位需要处理。继续处理这些进位,直到没有进位为止。
  • 解决代码

    import java.util.Scanner;public class Main {    public static void main(String[] args) {        Scanner scanner = new Scanner(System.in);        String input = scanner.nextLine().trim();        String[] numStrings = input.split(" ");        String a = numStrings[0];        String b = numStrings[1];        int m = a.length();        int n = b.length();        int[] result = new int[m + n];        int carry = 0;        for (int i = m - 1; i >= 0; i--) {            for (int j = n - 1; j >= 0; j--) {                int x = a.charAt(i) - '0';                int y = b.charAt(j) - '0';                int sum = x * y + carry;                result[i + j] = sum % 10;                carry = sum / 10;            }        }        // 处理剩余的进位        int i = 0;        int j = 0;        while (carry > 0) {            int sum = carry;            if (i + j < m + n) {                result[i + j] = sum % 10;                carry = sum / 10;            } else {                break;            }            i++;            j++;        }        // 构建结果字符串        StringBuilder sb = new StringBuilder();        for (int k = 0; k < m + n; k++) {            sb.append(result[k]);        }        // 去掉前导零        int start = 0;        while (start < m + n && sb.charAt(start) == '0') {            start++;        }        if (start == m + n) {            System.out.println("0");        } else {            System.out.println(sb.substring(start));        }    }}

    代码解释

  • 读取输入:使用Scanner读取输入字符串,并将其拆分为两个数字字符串。
  • 初始化结果数组:创建一个足够长的数组来保存乘积结果。
  • 双重循环处理每一位:从右到左处理每一位,计算乘积并处理进位。
  • 处理剩余进位:在双重循环完成后,继续处理剩余的进位。
  • 构建结果字符串:将结果数组转换为字符串,并去掉前导零。
  • 这种方法确保了我们能够处理非常大的数字,并正确地返回它们的乘积。

    转载地址:http://tsvj.baihongyu.com/

    你可能感兴趣的文章
    MySQL 调优/优化的 101 个建议!
    查看>>
    mysql 转义字符用法_MySql 转义字符的使用说明
    查看>>
    mysql 输入密码秒退
    查看>>
    mysql 递归查找父节点_MySQL递归查询树状表的子节点、父节点具体实现
    查看>>
    mysql 通过查看mysql 配置参数、状态来优化你的mysql
    查看>>
    mysql 里对root及普通用户赋权及更改密码的一些命令
    查看>>
    Mysql 重置自增列的开始序号
    查看>>
    mysql 锁机制 mvcc_Mysql性能优化-事务、锁和MVCC
    查看>>
    MySQL 错误
    查看>>
    mysql 随机数 rand使用
    查看>>
    MySQL 面试题汇总
    查看>>
    MySQL 面试,必须掌握的 8 大核心点
    查看>>
    MySQL 高可用性之keepalived+mysql双主
    查看>>
    MySQL 高性能优化规范建议
    查看>>
    mysql 默认事务隔离级别下锁分析
    查看>>
    Mysql--逻辑架构
    查看>>
    MySql-2019-4-21-复习
    查看>>
    mysql-5.6.17-win32免安装版配置
    查看>>
    mysql-5.7.18安装
    查看>>
    MySQL-Buffer的应用
    查看>>