切磋一下
public static ArrayList multiplyBigInterger(List num1,
List num2) {
if (num1 == null || num1.isEmpty() || num2 == null || num2.isEmpty()
) {
throw new IllegalArgumentException("Invalid input");
}
if (num1.size() < num2.size()) {
return multiplyBigInterger(num2, num1);
}
// num1.size() >= num2.size()
ArrayList result = new ArrayList(num1.size()
+ num2.size());
for (int j = 0; j < num2.size(); j++) {
int c = 0, resultIndex = 0;
for (int i = 0; i < num1.size(); i++) {
resultIndex = i + j;
if (resultIndex >= result.size()) {
result.add(0);
}
int n1 = num1.get(i);
int n2 = num2.get(j);
checkValidSingleDigit(n1);
checkValidSingleDigit(n2);
int v = n1 * n2 + c + result.get(resultIndex);
result.set(resultIndex, v % 10);
c = v / 10;
}
while (c > 0) {
if (++resultIndex < result.size()) {
c += result.get(resultIndex);
result.set(resultIndex, c % 10);
} else {
result.add(c % 10);
}
c /= 10;
}
}
return result;
}
Test:
List n1 = Arrays.asList(9);
List n2 = Arrays.asList(9, 9, 9);
for (int i = n1.size() - 1; i >= 0; i--) {
System.out.print(n1.get(i));
}
System.out.print(" X ");
for (int i = n2.size() - 1; i >= 0; i--) {
System.out.print(n2.get(i));
}
System.out.print(" = ");
ArrayList r = multiplyBigInterger(n1, n2);
for (int i = r.size() - 1; i >= 0; i--) {
System.out.print(r.get(i));
}