我是Java的初学者。在对w3resource进行一些练习时,我遇到了困扰我的问题。基本上我需要输入两个二进制数并将其相加。我想知道有没有更简单的方法,而无需输入二进制数字作为long
变量(因为在本练习的给定解决方案中),并且如果没有更简单的方法,有人可以解释使用while循环的位置代码的末尾?
提前感谢!
/*given solution*/
import java.util.Scanner;
public class Exercise17 {
public static void main(String[] args)
{
long binary1, binary2;
int i = 0, remainder = 0;
int[] sum = new int[20];
Scanner in = new Scanner(System.in);
System.out.print("Input first binary number: ");
binary1 = in.nextLong();
System.out.print("Input second binary number: ");
binary2 = in.nextLong();
while (binary1 != 0 || binary2 != 0)
{
sum[i++] = (int)((binary1 % 10 + binary2 % 10 + remainder) % 2);
remainder = (int)((binary1 % 10 + binary2 % 10 + remainder) / 2);
binary1 = binary1 / 10;
binary2 = binary2 / 10;
}
if (remainder != 0) {
sum[i++] = remainder;
}
--i;
System.out.print("Sum of two binary numbers: ");
while (i >= 0) {
System.out.print(sum[i--]);
}
System.out.print("\n");
}
}
[它们使用long并将其解释为二进制数字,例如:如果输入10,它将是十进制2的二进制表示。因此,使用long作为输入这些数字的最简单方法。
现在为while循环:
((二进制1%10 +二进制2%10 +余数)
这将最后一位数字(使用% 10
取模)求和。结果可能有两位数字(在二进制系统中)。最后的数字再次使用模(% 2
)取并放入结果数组。第一位数字放入ramainder中,以将其添加到下一位数字。
我认为更简单的方法可能是将您的二进制数字读为String,然后执行以下操作
String b1 = "101";
String b2 = "1000";
BigInteger bi1 = new BigInteger(b1, 2);
BigInteger bi2 = new BigInteger(b2, 2);
BigInteger result = bi1.add(bi2);
System.out.println(result.longValue());
System.out.println(result.toString(2));
最后两行以十进制然后以二进制形式显示输出。
有两种方法可以使用Integer包装器类轻松完成。
Integer.toString(0b+yournum + 0b+othernumber,2);
例如:-
Integer.toString(0b101 + 0b110 ,2);
需要Java 7及更高版本。
将输入作为字符串并使用parseInt方法
int n1 = “101”;
int n2 = “110”;
int sum = Integer.parseInt(n1,2) + Integer.parseInt(n2,2);
Integer.toBinaryString(sum);
Ps:-此方法限制为最大int大小2147483647,否则将引发异常