0

这是我的代码:

public static double kMultiply( double x, double y, double n )
{
    if( n == 1 )
    {
        cost += 1;
        return x*y;
    }
    else
    {
        double m,a,b,c,d,ac,bd,g;

        m = Math.floor(n/2);

        a = Math.floor(x / Math.pow(2,m));
        b = x % Math.pow(2,m);
        c = Math.floor(y / Math.pow(2,m));
        d = y % Math.pow(2,m);

        ac = kMultiply(a,c,m);
        bd = kMultiply(b,d,m);
        g  = kMultiply(a-b, c-d, m);

        cost += 6*m;
        return Math.pow(2,2*m)*ac + Math.pow(2,m)*(ac + bd - g) + bd;

    }
}

x 和 y 是因子,n 是较大数字的大小,并被描述为以二进制表示形式写入该数字所需的位数。对于 x 和 y 的某些值,该算法不会返回正确的 x*y 值,因为我无法得到正确的 g。例如,对于

kMultiply(4, 11, 4)

该方法返回 52 而不是 44,因为它将 -3 分配给 g,而不是 -1。

知道如何解决这个问题吗?任何帮助将不胜感激。

4

0 回答 0