JAVA高精度乘法模板(大数乘以一个小数)

本文探讨了如何使用Java实现高精度乘法,通过两种方法详细介绍了将大数(倒序存储)与整数相乘的过程,包括逐位相乘、进位处理和结果存储。同时,分析了这两种方法的时间复杂度为O(n)和空间复杂度为O(n)。
摘要由CSDN通过智能技术生成
1.思路

高精度乘法是大数乘以一个int型的小数,和前面模拟不同,这里不是一位一位的乘,而是a一位乘以整个数b,当a乘到最高位且没有进位就结束了。

2.代码模板
方法一:
//a为大数,倒序存储,b为int型,返回a*b的结果
public static List<Integer> multiply(List<Integer> a, int b) {
    int t = 0;		//保存进位
    List<Integer> c = new ArrayList<>();	//保存答案
    for(int i = 0; i < a.size(); i++) {
        t += a.get(i) * b;	//用a的一位乘以b加上之前的进位
        c.add(t % 10);		//保存当前位计算的结果
        t /= 10;			//前面保存了一位,所以要开始对下一位计算存储
    }
    while(t != 0) {			//如果进位还没用完
        c.add(t % 10);
        t /= 10;
    }
    while(c.size() > 1 && c.get(c.size() - 1) == 0)	//去掉前导0,实际上只有b为0时才有前导0
        c.remove(c.size() - 1);
    return c;
}
    
    
方法二:
//Java大数
BigInteger a = new BigInteger(s[0]);
BigInteger b = new BigInteger(s[1]);
BigInteger c = a.multiply(b);
3.复杂度分析
  • 时间复杂度:O(n)
  • 空间复杂度:O(n)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值