使用整数数组的Java二进制乘法无效
我正在制作一个程序,它接受两个十进制数并将它们转换成二进制数,二进制数存储在整数数组中。然后我需要使用两个整数数组进行乘法。结果还应该是一个二进制整数数组(我需要使用for循环验证)。然后我把结果转换成十进制数 到目前为止,我有以下代码。我把十进制数转换成二进制数的逻辑很好,反之亦然。然而,二进制结果总是比预期结果小。我在这上面花了很多时间,你能帮我检查一下有什么问题吗使用整数数组的Java二进制乘法无效,java,arrays,binary,Java,Arrays,Binary,我正在制作一个程序,它接受两个十进制数并将它们转换成二进制数,二进制数存储在整数数组中。然后我需要使用两个整数数组进行乘法。结果还应该是一个二进制整数数组(我需要使用for循环验证)。然后我把结果转换成十进制数 到目前为止,我有以下代码。我把十进制数转换成二进制数的逻辑很好,反之亦然。然而,二进制结果总是比预期结果小。我在这上面花了很多时间,你能帮我检查一下有什么问题吗 public class BinaryMultiplication { public static void main(Str
public class BinaryMultiplication {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int num1 = scanner.nextInt();
int num2 = scanner.nextInt();
int[] binaryNum1 = toBinary(num1);
int[] binaryNum2 = toBinary(num2);
System.out.println("Expected result: " + num1 * num2);
System.out.println("Decimal number 1: " + toDecimal(binaryNum1));
System.out.println("Decimal number 2: " + toDecimal(binaryNum2));
int[] resultBinaries = new int[100];
for (int i = 0; i < resultBinaries.length; ++i) {
resultBinaries[i] = 0;
}
for (int i = 0; binaryNum1[i] != -1; ++i) {
for (int j = 0; binaryNum2[j] != -1; ++j) {
resultBinaries[i + j] += binaryNum1[i] * binaryNum2[j] % 2;
resultBinaries[i + j] %= 2;
}
}
resultBinaries[99] = -1;
for (int i = 0; resultBinaries[i] != -1; ++i) {
if (resultBinaries[i] > 1) {
System.out.println("The result is not a binary!!");
}
}
System.out.println("Actual decimal result: " + toDecimal(resultBinaries));
}
public static int toDecimal(int[] binaryNum) {
int result = 0;
int factor = 1;
for (int i = 0; binaryNum[i] != -1; ++i) {
result += binaryNum[i] * factor;
factor *= 2;
}
return result;
}
public static int[] toBinary(int num) {
int[] binaries = new int[100];
int index = 0;
while (num > 0) {
binaries[index++] = num % 2;
num /= 2;
}
binaries[index] = -1;
return binaries;
}
}
当
resultBinaries[i+j]
增加到2时会发生什么?它被减少到0,然后resultBinaries[i+j+1]
应该增加1,但就我所见,这在代码中并没有发生。谢谢,我添加了resultBinaries[i+j+1]+=resultBinaries[i+j]/2;它是有效的。
45 67
Expected result: 3015
Decimal number 1: 45
Decimal number 2: 67
Actual decimal result: 2871
for (int i = 0; binaryNum1[i] != -1; ++i) {
for (int j = 0; binaryNum2[j] != -1; ++j) {
resultBinaries[i + j] += binaryNum1[i] * binaryNum2[j] % 2;
resultBinaries[i + j] %= 2;
}
}