Java题解:以二进制加法计算二进制字符串相加结果
在Java中计算两个二进制字符串相加的结果,你可以通过以下步骤实现:
理解问题:我们需要将两个二进制字符串相加,并返回它们之和的二进制表示形式。
解决方案思路:
- 从字符串的最低有效位(末尾)开始逐位相加。
- 使用一个变量来跟踪进位。
- 当循环结束时,如果还有进位需要处理,要在结果前添加进位。
实现代码:
public class BinaryAddition {
public static String addBinary(String a, String b) {
StringBuilder result = new StringBuilder();
int i = a.length() - 1;
int j = b.length() - 1;
int carry = 0;
while (i >= 0 || j >= 0) {
int sum = carry;
if (i >= 0) {
sum += a.charAt(i) - '0'; // 将字符转换为整数
i--;
}
if (j >= 0) {
sum += b.charAt(j) - '0'; // 将字符转换为整数
j--;
}
result.append(sum % 2); // 当前位
carry = sum / 2; // 更新进位
}
// 如果最终有进位,则添加
if (carry != 0) {
result.append(carry);
}
// 由于我们从低位到高位构建的结果字符串是反向的,因此需要翻转
return result.reverse().toString();
}
public static void main(String[] args) {
String a = "1101";
String b = "1011";
System.out.println("Sum: " + addBinary(a, b)); // Output: "11000"
}
}
- 代码解释:
StringBuilder
用于构建最后的二进制结果。- 使用两个指针
i
和j
分别遍历字符串a
和b
,同时处理可能的不同长度问题。 carry
变量用于跟踪加法进位。- 每次循环中,将当前位以及进位相加,然后求出当前位的值和新的进位值。
- 最后,如果存在进位,则将进位添加到结果中,并返回反转后的字符串。
这种算法的时间复杂度是O(n),其中n是较长的字符串的长度,因为我们逐位遍历两个字符串。