Multiply Strings 大数相乘 java

本文详细介绍了如何通过模拟竖式相乘的方式实现两个大整数的乘法运算,并提供了具体的Java代码实现。此外,还展示了使用Java内置的BigInteger类进行大整数乘法的简便方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

先贴上代码

 1 public String multiply(String num1, String num2) {
 2         String str = "";
 3         StringBuffer sb = new StringBuffer(num1);
 4         num1 = sb.reverse().toString();
 5         sb = new StringBuffer(num2);
 6         num2 = sb.reverse().toString();
 7         int[] res = new int[num1.length() + num2.length()];
 8         for (int i = 0; i < num1.length(); i++) {
 9             for (int j = 0; j < num2.length(); j++) {
10                 res[i + j] += (num1.charAt(i) - '0') * (num2.charAt(j) - '0');
11             }
12         }
13         int k = 0, contribute = 0;
14         while (k < res.length || contribute > 0) {
15             int tmp = k<res.length?res[k]:0;
16             tmp = contribute+tmp;
17             contribute = tmp/10;
18             str += tmp%10;        
19             k++;
20         }
21         sb = new StringBuffer(str);
22         str = sb.reverse().toString();        
23         int i = 0;
24         while(i<str.length()&&str.charAt(i)=='0')
25             i++;
26         if(i<str.length()){
27             str = str.substring(i);
28         }else{
29             str = "0";
30         }
31         return str;
32     }
View Code

思路如下:

模拟竖式相乘

1、转换并反转,字序反转;
2、逐位相乘,结果存放在res[i+j]中;
3、处理进位;
4、转换并反转,将计算结果转换为字符串并反转。
5、消除多余的0;

两数相乘,结果的长度一定不大于乘数和被乘数的长度之和。

上述也可以用直接用java的BigInteger类实现

public static void main(String[] args) {        
        String a = "98989898989898956898", b = "989892551548781251323265615150";        
        BigInteger aa = new BigInteger(a);
        BigInteger bb = new BigInteger(b);        
        System.out.println(aa.multiply(bb));
        
    }
View Code

 

转载于:https://www.cnblogs.com/tina-smile/p/4870837.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值