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)