0

我正在尝试使用 karatsuba 乘法将 n 位数字相乘。

我得到一位数的输出(示例 4 和 5 = 20)。

但是,当我将 1234 和 5678 相乘时,我得到了错误并且没有输出结果。

我已经更新了代码和错误消息。请检查。

错误是点击这里

import java.math.BigInteger;

class karatsubamultiplication{

public static BigInteger karat(BigInteger number1, BigInteger number2){

    if(number1.bitLength() < 4 && number2.bitLength() < 4)
        return number1.multiply(number2);

    //Finding maximum length of two 
    //int m = Math.max(number1, number2);
    String first = number1.toString();
    String second  = number2.toString();

    BigInteger a = new BigInteger(first.substring(0,  first.length()/2));
    BigInteger b = new BigInteger(first.substring(first.length() - first.length()/2, first.length()));

    BigInteger c = new BigInteger(second.substring(0,  second.length()/2));
    BigInteger d = new BigInteger(second.substring(second.length() - second.length()/2, second.length()));

    BigInteger ac = karat(a, c);
    BigInteger bd = karat(b, d);

    BigInteger abcd = karat(a.add(b), c.add(d));

    BigInteger z = abcd.subtract(ac.add(bd));

    int m = String.valueOf(number1).length();

    BigInteger len = new BigInteger(String.valueOf(Math.pow(10, m)));

    return (ac.multiply(len)).add(z.multiply(len.divide(BigInteger.valueOf(2)))).add(bd);
}


public static void main(String[] args){

    BigInteger result = new BigInteger("0");

    BigInteger x = new BigInteger("1234");

    BigInteger y = new BigInteger("5678");

    result = karat(x, y);

    System.out.println(result);
       }
   }

请更正代码。我没有检查两个数字是否相等,长度是奇数还是偶数。

谢谢你。

4

0 回答 0