Karatsuba乘法不能与BigInteger递归工作

时间:2017-08-31 12:39:02

标签: java algorithm biginteger karatsuba

我正在尝试使用karatsuba乘法来乘以n位数。

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

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

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

错误为Click here

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);
       }
   }

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

谢谢。

0 个答案:

没有答案