以字符串形式给出的两个二进制数的相乘

时间:2019-02-26 10:27:48

标签: java math binary

所以我有一个代码,应该在不使用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));
}

}

1 个答案:

答案 0 :(得分:2)

您可能不使用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();
}