【问题标题】:Multiplication of two Binary Numbers given as Strings以字符串形式给出的两个二进制数的乘法
【发布时间】:2019-07-19 20:51:43
【问题描述】:

所以我有一个代码应该将两个二进制数乘以字符串而不使用 ParseInt。到目前为止,我的代码实际上可以工作,但它是乘以十进制数。它应该进行添加的部分中的某些内容是错误的。 感谢您的任何帮助!

public static String multiply(String binary1, String binary2) 

    String b1 = new StringBuilder(binary1).reverse().toString();
    String b2 = new StringBuilder(binary2).reverse().toString();

    int[] m = new int[binary1.length()+binary2.length()];

    for (int i = 0; i < binary1.length(); i++) {
        for (int j = 0; j < binary2.length(); j++) {
            m[i+j] += (b1.charAt(i)-'0')*(b2.charAt(j)-'0');
        }
    }

    StringBuilder sb = new StringBuilder();

    for(int i=0; i < m.length; i++) {
        int mod = m[i]%10;
        int carry = m[i]/10;
        if (i+1 < m.length) {
            m[i + 1] = m[i + 1] + carry;
        }
        sb.insert(0, mod);

    }
    // delete leading zeros
    while (sb.charAt(0) == '0' && sb.length() > 1) {
        sb.deleteCharAt(0);
    }
    return sb.toString();
}

public static void main(String[] args) {
    Scanner scan = new Scanner(System.in);
    System.out.print("1. Faktor:  ");
    String input1 = scan.next("(0|1)*");
    System.out.print("2. Faktor:  ");
    String input2 = scan.next("(0|1)*");
    scan.close();
    System.out.println("Ergebnis: " + multiply(input1, input2));
}

}

【问题讨论】:

  • 只需将%10/10 更改为%2/2
  • 你为什么要删除所有代码?
  • 问题和答案,没有代码没有任何意义,所以我回滚了代码的删除。

标签: java math binary


【解决方案1】:

你不能使用Integer.parseInt,但没有人禁止你实现自己的解析器:

private static int parseBinaryString(String s) {
    int binary = 0;
    for (int i = s.length() - 1, c; i >= 0; i--) {
        binary <<= 1;
        c = s.charAt(i);
        if (c == '1') {
            binary++;
        } else if (c != '0') {
            throw new NumberFormatException(s);
        }
    }
    return binary;
}

然后可以在您的 multiply 方法中像这样简单地使用它:

private static String multiply(String a, String b) {
    return Integer.toBinaryString(parseBinaryString(a) * parseBinaryString(b));
}

如果您不能使用Integer.toBinaryString,您可以自己实现该方法:

private static String toBinaryString(int i) {
    StringBuilder binary = new StringBuilder();
    for (int t = i; t != 0; t >>= 1) {
        binary.append((i & t) != 0 ? 1 : 0);
    }
    return binary.toString();
}

【讨论】:

  • 谢谢,但这不是我想要的。我必须使用我的方法乘法而不转换为整数。
  • @swagneyney 使用您问题下方评论中的建议。这应该也可以工作
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-24
  • 1970-01-01
  • 2021-01-11
  • 2016-01-08
相关资源
最近更新 更多