1.两个数字相乘
注意:用户输入的数字存入数组是按照先后顺序存储的。例如输入123,那么数组为int[] arr = {1,2,3};但应该是321。
989987*869897=?
先将乘法列出竖式:
9 8 7 arr1
x 8 9 7 arr2
------------
63 56 49
81 72 63
72 64 56
----------------
72 145 191 119 49 result
16--20--12---4-----
88 5 3 3 9
寻找其中的规律:
result[0] = arr1[0] * arr2[0];
result[1] = arr1[1] * arr2[0] + arr1[0] * arr2[1];
result[2] = arr1[0] * arr2[0] + arr1[1] * arr2[1] + arr1[0] * arr2[2];
result[3] = arr1[2] * arr2[1] + arr1[1] * arr2[2];
result[4] = arr1[2] * arr2[2];
答案解析:
int[] arr1 = {7, 8, 9, 9, 8, 9};
int[] arr2 = {7, 9, 8, 9, 6, 8};
int[] result = new int[12];
for (int i = 0; i < arr1.length; i++) {
for (int j = 0; j < arr2.length; j++) {
// 这里需要注意的是:每次遍历到同一个和时,
// 都要将对应的arr1[i]和arr2[j]加进去,并且和之前的相加,所以使用+=
result[i + j] += (arr1[i] * arr2[j]);
}
}
for (int i = 0; i < result.length - 1; i++) {
int temp = result[i];
// result[0]即第一位数字49取模
result[i] = temp % 10;
// 十位数和下一位数相加
result[i + 1] += (temp / 10);
}
System.out.println("遍历result数组:" + Arrays.toString(result));
// 遍历result数组:[9, 3, 3, 1, 2, 7, 6, 8, 1, 1, 6, 8]
// 数组反转
for (int min = 0, max = result.length - 1; min < max; min++, max--) {
int temp = result[min];
result[min] = result[max];
result[max] = temp;
}
System.out.println("数组反转后的正确答案:" + Arrays.toString(result));
// 数组反转后的正确答案:[8, 6, 1, 1, 8, 6, 7, 2, 1, 3, 3, 9]