提示信息

Java题解:以二进制加法计算二进制字符串相加结果

五行三界 已关注

在Java中计算两个二进制字符串相加的结果,你可以通过以下步骤实现:

  1. 理解问题:我们需要将两个二进制字符串相加,并返回它们之和的二进制表示形式。

  2. 解决方案思路

    • 从字符串的最低有效位(末尾)开始逐位相加。
    • 使用一个变量来跟踪进位。
    • 当循环结束时,如果还有进位需要处理,要在结果前添加进位。
  3. 实现代码

  1. public class BinaryAddition {
  2. public static String addBinary(String a, String b) {
  3. StringBuilder result = new StringBuilder();
  4. int i = a.length() - 1;
  5. int j = b.length() - 1;
  6. int carry = 0;
  7. while (i >= 0 || j >= 0) {
  8. int sum = carry;
  9. if (i >= 0) {
  10. sum += a.charAt(i) - '0'; // 将字符转换为整数
  11. i--;
  12. }
  13. if (j >= 0) {
  14. sum += b.charAt(j) - '0'; // 将字符转换为整数
  15. j--;
  16. }
  17. result.append(sum % 2); // 当前位
  18. carry = sum / 2; // 更新进位
  19. }
  20. // 如果最终有进位,则添加
  21. if (carry != 0) {
  22. result.append(carry);
  23. }
  24. // 由于我们从低位到高位构建的结果字符串是反向的,因此需要翻转
  25. return result.reverse().toString();
  26. }
  27. public static void main(String[] args) {
  28. String a = "1101";
  29. String b = "1011";
  30. System.out.println("Sum: " + addBinary(a, b)); // Output: "11000"
  31. }
  32. }
  1. 代码解释
    • StringBuilder用于构建最后的二进制结果。
    • 使用两个指针ij分别遍历字符串ab,同时处理可能的不同长度问题。
    • carry变量用于跟踪加法进位。
    • 每次循环中,将当前位以及进位相加,然后求出当前位的值和新的进位值。
    • 最后,如果存在进位,则将进位添加到结果中,并返回反转后的字符串。

这种算法的时间复杂度是O(n),其中n是较长的字符串的长度,因为我们逐位遍历两个字符串。

    遇到难题? "AI大模型GPT4.0、GPT" 是你的私人解答专家! 点击按钮去提问......
五行三界 关注 已关注

最近一次登录:2024-11-20 04:44:13   

暂时还没有签名,请关注我或评论我的文章
×
免费图表工具,画流程图、架构图