JaveSE——数组+循环练习题

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]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值