Умножение двух двоичных чисел в виде строк - PullRequest
0 голосов
/ 26 февраля 2019

, поэтому у меня есть код, который должен умножить два двоичных числа на строку без использования 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 голосов
/ 26 февраля 2019

Вы не можете использовать 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();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...