Eclipse java中的二进制加法
我用java编写了一个二进制加法程序。但结果有时并不正确。Eclipse java中的二进制加法,eclipse,binary,addition,Eclipse,Binary,Addition,我用java编写了一个二进制加法程序。但结果有时并不正确。 例如,如果我添加1110+111。结果应该是10101。 但是我的程序抛出了10001。 也许你们中的一个会发现错误 import java.util.Scanner; public class BinaryAdder { public static String add(String binary1, String binary2) { int a = binary1.length()-1; int b =
例如,如果我添加1110+111。结果应该是10101。
但是我的程序抛出了10001。
也许你们中的一个会发现错误
import java.util.Scanner;
public class BinaryAdder {
public static String add(String binary1, String binary2) {
int a = binary1.length()-1;
int b = binary2.length()-1;
int sum = 0;
int carry = 0;
StringBuffer sb = new StringBuffer();
while (a >= 0 || b >= 0) {
int help1 = 0;
int help2 = 0;
if( a >=0){
help1 = binary1.charAt(a) == '0' ? 0 : 1;
a--;
} if( b >=0){
help2 = binary2.charAt(b) == '0' ? 0 : 1;
b--;
}
sum = help1 +help2 +carry;
if(sum >=2){
sb.append("0");
carry = 1;
} else {
sb.append(String.valueOf(sum));
carry = 0;
}
}
if(carry == 1){
sb.append("1");
}
sb.reverse();
String s = sb.toString();
s = s.replaceFirst("^0*", "");
return s;
}
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.print("First: ");
String input1 = scan.next("(0|1)*");
System.out.print("Second: ");
String input2 = scan.next("(0|1)*");
scan.close();
System.out.println("Result: " + add(input1, input2));
}
}此功能更简单:
public static String binaryAdd(String binary1,String binary2){
return Long.toBinaryString(Long.parseLong(binary1,2)+Long.parseLong(binary2,2));
}
您可以将
Long.parseLong
更改为Integer.parseInt
,如果您不希望看到非常大的数字,您也可以将parse(Long/Int)
替换为parseUnsigned(Long/Int)
,因为您不希望字符串有负号,是吗?您在
help1 + help2 = 3
因此,您的方法stringadd(stringbinary1,stringbinary2)
应该如下所示:
public static String add(String binary1, String binary2) {
int a = binary1.length()-1;
int b = binary2.length()-1;
int sum = 0;
int carry = 0;
StringBuffer sb = new StringBuffer();
while (a >= 0 || b >= 0) {
int help1 = 0;
int help2 = 0;
if( a >=0){
help1 = binary1.charAt(a) == '0' ? 0 : 1;
a--;
} if( b >=0){
help2 = binary2.charAt(b) == '0' ? 0 : 1;
b--;
}
sum = help1 +help2 +carry;
if (sum == 3){
sb.append("1");
carry = 1;
}
else if(sum ==2){
sb.append("0");
carry = 1;
} else {
sb.append(String.valueOf(sum));
carry = 0;
}
}
if(carry == 1){
sb.append("1");
}
sb.reverse();
String s = sb.toString();
s = s.replaceFirst("^0*", "");
return s;
}
我希望这能帮助你
sum = help1 +help2 +carry;
if(sum >=2){
sb.append("0");
carry = 1;
} else {
sb.append(String.valueOf(sum));
carry = 0;
}
如果总和为2,则附加“0”和进位=1
当总和为3时,加上“1”和进位=1怎么样
永远不会超过4岁我知道我有点晚了,但我刚刚完成了一项类似的任务,所以对于我这个职位上的任何人来说,我是如何应对的
import java.util.Scanner;
public class Binary_Aids {
public static void main(String args[]) {
System.out.println("Enter the value you want to be converted");
Scanner inp = new Scanner(System.in);
int num = inp.nextInt();
String result = "";
while(num > 0) {
result = result + Math.floorMod(num, 2);
num = Math.round(num/2);
}
String flippedresult = "";
for(int i = 0; i < result.length(); i++) {
flippedresult = result.charAt(i) + flippedresult;
}
System.out.println(flippedresult);
}
}
import java.util.Scanner;
公营二元教具{
公共静态void main(字符串参数[]){
System.out.println(“输入要转换的值”);
扫描仪inp=新扫描仪(System.in);
int num=inp.nextInt();
字符串结果=”;
while(num>0){
结果=结果+数学地板(num,2);
num=数学四舍五入(num/2);
}
字符串flippedresult=“”;
for(int i=0;i
这需要一个输入并转换成二进制。在这里,我用这个程序添加数字,然后转换回
import java.util.Scanner;
public class Binary_Aids {
public static void main(String args[]) {
Scanner inp = new Scanner(System.in);
String decimalToBinaryString = new String();
System.out.println("First decimal number to be added");
int num1 = inp.nextInt();
String binary1 = decimalToBinaryString(num1);
System.out.println("Input decimal number 2");
int num2 = inp.nextInt();
String binary2 = decimalToBinaryString(num2);
int patternlength = Math.max[binary1.length[], binary2.length[]];
while(binary1.length() < patternlength) {
binary1 = "0" + binary2;
}
System.out.println(binary1);
System.out.println(binary2);
int carry = 0;
int frequency_of_one;
String result = "";
for(int i = patternlength -i; i >= 0; i--) {
frequency_of_one = carry;
if(binary1.charAt(i) == '1') {
frequency_of_one++;
}
if(binary2.charAt(i) == '1') {
frequency_of_one++;
}
switch(frequency_of_one) {
case 0 ;
carry = 0;
result = "1" + result;
break;
case 1 ;
carry = 0;
result = "1" + result;
break;
case 2;
carry = 1;
result = "0" + result;
breake;
case 3;
carry = 1;
result = "1" + result;
breake;
}
}
if(carry == 1) {
result = "1" + result;
}
System.out.println(result);
}
public static String decimalToBinaryString(int decimal1) {
String result = "";
while(decimal1 > 0) {
result = result + Math.floorMod(decimal1, 2);
decimal = Math.round(decimal1/2);
}
String flipresult = "";
for(int i = 0; i < result.length[]; i++) {
flipresult = result.charAt(i) + flippedresult;
}
return flippedresult;
}
}
import java.util.Scanner;
公营二元教具{
公共静态void main(字符串参数[]){
扫描仪inp=新扫描仪(System.in);
String DecimalToBinarysting=新字符串();
System.out.println(“要添加的第一个十进制数”);
int num1=inp.nextInt();
字符串二进制1=十进制二进制字符串(num1);
System.out.println(“输入十进制数2”);
int num2=inp.nextInt();
字符串二进制2=十进制二进制字符串(num2);
int patternlength=Math.max[binary1.length[],binary2.length[];
while(binary1.length()=0;i--){
_one的频率_=进位;
如果(二进制1.字符(i)='1'){
_one++的频率;
}
如果(二进制2.字符(i)='1'){
_one++的频率;
}
开关(一个的频率){
案例0;
进位=0;
结果=“1”+结果;
打破
案例1;
进位=0;
结果=“1”+结果;
打破
案例2;
进位=1;
结果=“0”+结果;
布雷克;
案例3;
进位=1;
结果=“1”+结果;
布雷克;
}
}
如果(进位==1){
结果=“1”+结果;
}
系统输出打印项次(结果);
}
公共静态字符串十进制字符串(整数小数1){
字符串结果=”;
while(小数点1>0){
结果=结果+数学floorMod(小数点1,2);
小数=数学四舍五入(小数点1/2);
}
字符串flipresult=“”;
for(int i=0;i
No教授特别要求非常大的数字。但我不期望负signs@E.C然后使用Long.parseUnsignedLong
即可,除非数字甚至大于Long
可以容纳的数值(大于9223372036854775807
)即可!我希望你能接受我的回答