0%

两大数的积

随机给定两个超大整数,实现计算两数之乘积。

两大数的积

​ 随机给定两个超大整数,实现计算两数之乘积。如“111111111111111”和“222222222222222”,输出乘积“24691358024691308641975308642”

思路:

1.将两个数存到两个整数数组中
2.new 结果数据,长度为两个整数数组之和
3.两个数组逐位相乘后保存在结果数组中
4.处理进位,将数组中超过10的数据对10取余,数组前一位为/10
5.遍历结果数组。结果数组最前边为0时,处理掉。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
import java.util.Arrays;

public class NumberTwoProduct {
public static void main(String[] args) {
String str1 = "22";
String str2 = "22";

//1.将两个数存到两个整数数组中
char[] num1 = str1.toCharArray();
char[] num2 = str2.toCharArray();

//2.new 结果数据,长度为两个整数数组之和
int[] result = new int[num1.length + num2.length];

//3.两个数组逐位相乘后保存在结果数组中
for (int i = 0; i < num1.length; i++){
for (int j = 0; j < num2.length; j++){
result[i + j + 1] += (num1[i] - '0') * (num2[j] - '0');
}
}

//4.处理进位,数组前一位为前一位+本位/10,数组本位为本位%10
for (int i = result.length -1 ; i > 0; i--){
if (result[i] >= 10){
result[i - 1] += result[i] / 10;
result[i] %= 10;
}
}

//5.从后往前遍历结果数组,去除最前边的0
StringBuilder stringBuilder = new StringBuilder();
for (int i = 0; i < result.length; i++){
if (i == 0 && result[i] == 0 )
continue;
stringBuilder.append(result[i]);
}

System.out.println(Arrays.toString(result));
System.out.println(stringBuilder);
}
}