java两个二进制数求和_java中接受2个二进制数并返回其总和的最短代码是什么?...

我需要添加两个二进制数并返回总和。 不允许进行基本转换。 我知道使用数组的长方法。 但是还有什么短的吗? 简称为"具有较小的代码长度"。 提前致谢。

如果我不够明确,下面是一个示例:

输入:

1101

11

输出:10000

请向我们展示您尝试过的内容,并告诉我们您为什么关心"具有较小的代码长度"。

两个二进制数? int sum(int a, int b) { return a + b; }(它包含一些不必要的空格,但是您可以弄清楚。)

请记住,计算机中的所有数字都是二进制的。 当我们将含义应用于位的排列时,我们对它们的思考方式差异很大。 因此,您需要传达有关如何表示数据的更多信息。 int a = 5;与String a ="0101101101";一样二进制。 解决方案因输入而异。

@NPE我所做的是非常基本的。 我接受了两个数字作为字符串,然后使用循环使用sum和carry将它们数字化。

@HotLicks那没有用。 也许我不是要表达我想要的。 相应地编辑了问题。

两个(二进制)整数a和b的总和可以计算为a+b,因为所有算术均以二进制形式完成。

如果您输入的内容是人类可读的字符串,而不是二进制的,则可以使用标准BigInteger类以二进制形式计算其总和:

import java.math.BigInteger;

String sum(String a, String b) {

return new BigInteger(a, 2).add(new BigInteger(b, 2)).toString(2);

}

是的,"人类可读的字符串"。 那就是我想要的。 谢谢。

这是几个选项,不使用Java提供的任何实用程序方法。这些不考虑符号(以+/-开头),因此它们仅处理整数。

第一种方法将二进制字符串转换为整数,将整数相加,然后将结果转换回二进制。它使用方法本地的内部类Convert来避免为??每个参数复制binaryToInt()代码。

static String binaryAdd1(String binary1, String binary2) {

class Convert {

int binaryToInt(String binary) {

int result = 0;

for (int i = 0; i < binary.length(); i++) {

char c = binary.charAt(i);

result *= 2;

if (c == '1') {

result++;

} else if (c != '0') {

throw new IllegalArgumentException(binary);

}

}

return result;

}

}

final Convert convert = new Convert();

int int1 = convert.binaryToInt(binary1);

int int2 = convert.binaryToInt(binary2);

String result ="";

int temp = int1 + int2;

do {

result = ((temp & 1) == 1 ? '1' : '0') + result;

temp >>= 1;

} while (temp > 0);

return result;

}

第二种方法使用JHaps在其答案中指定的二进制加法逻辑将两个参数直接加在一起。这里没有中间转换为整数。

static String binaryAdd2(String binary1, String binary2) {

final String validDigits ="01";

String binarySum ="";

// pad the binary strings with one more significant digit for carrying

String bin1 = '0' + binary1;

String bin2 = '0' + binary2;

// add them together starting from least significant digit

int index1 = bin1.length() - 1;

int index2 = bin2.length() - 1;

boolean carry = false;

while (index1 >= 0 || index2 >= 0) {

char char1 = bin1.charAt(index1 >= 0 ? index1 : 0);

char char2 = bin2.charAt(index2 >= 0 ? index2 : 0);

if (validDigits.indexOf(char1) < 0)

throw new NumberFormatException(binary1);

if (validDigits.indexOf(char2) < 0)

throw new NumberFormatException(binary2);

if (char1 == char2) {

binarySum = (carry ? '1' : '0') + binarySum;

carry = char1 == '1';

} else {

binarySum = (carry ? '0' : '1') + binarySum;

}

index1--;

index2--;

}

if (binarySum.length() > 1 && binarySum.charAt(0) == '0') {

binarySum = binarySum.substring(1);

}

String result = binarySum.toString();

return result;

}

从二进制转换为整数后,不允许使用第一种方法。 第二个是我做的。 我想知道是否有比这短的东西。 谢谢。

将二进制数字表示为两个字符串。反转两个字符串。然后,您可以同时迭代两个字符串,将值添加到三个数组中,两个数组表示从字符串中添加的二进制数字,第三个数组表示进位数字。创建代表答案的第四个数组(您可能必须找到答案可能有多长时间的限制)。

通过使用标准二进制添加来填充答案数组:

0 + 0 = 0 in the same position,

1 + 0 = 0 + 1 = 1 in the same position,

1 + 1 = 0 in the same position, and carry a 1 to the next position,

1 + 1 + 1 = 1 in the same position, and carry a 1 to the next position.

反转数组,您将得到一个二进制数的答案。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值