题目:
给定两个非负整数(不含前导 0) A 和 B,请你计算 A×B 的值
1 ≤ A的长度 ≤ 100000
0 ≤ B ≤ 10000
输入:
3284925390
19
输出:
62413582410
自己写一个?
public class 高精度乘法 {
public static ArrayList<Integer> A = new ArrayList<>(), res = new ArrayList<>();
public static int B;
public static void main(String[] args) {
//这里A是超长数,B是int范围内的数
Scanner in = new Scanner(System.in);
String a = in.next();
B = in.nextInt();
for (int i = a.length()-1; i>=0; i--) A.add(a.charAt(i) - '0');
multi();
for (int i = res.size()-1; i>=0; i--) System.out.print(res.get(i));
}
//乘法,将A从个位开始,每一位都乘上B的值再加上上一位进位来的数,%10得到当前位的结果,再/=10得到该进位的值
public static void multi() {
int t = 0;
for (int i = 0; i < A.size(); i++) {
t += A.get(i) * B;
res.add(t%10);
t /= 10;
}
while (t > 0) { //这里防止A处理完后,还有剩余的t
res.add(t % 10);
t /= 10;
}
while (res.size() > 1 && res.get(res.size()-1) == 0) res.remove(res.size()-1); //防止123*0=000的情况
}
}
用java自带的BigInteger函数:
public class 高精度乘法{
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
BigInteger a = new BigInteger(in.next()), b = new BigInteger(in.next());
System.out.println(a.multiply(b));
}
}
声明:算法思路来源为y总,详细请见https://www.acwing.com/
本文仅用作学习记录和交流