以下Power Of Two代码的时间复杂度是多少?

时间:2018-05-01 21:15:12

标签: c# time time-complexity

我想知道以下代码的时间复杂度。如果不是恒定时间,那么什么是更好的解决方案?

static bool powerOfTwo(double number)
{
    double log = Math.Log(number, 2); 
    double pow = Math.Pow(2, Math.Round(log));
    return pow == number;
}

1 个答案:

答案 0 :(得分:1)

这是恒定的时间,但它不是最快的恒定时间解决方案。如果我们对真正double s(即次正规)的错误答案感到满意

long bits = BitConverter.DoubleToInt64Bits(number);
return (bits & 0xfffffffffffffL == 0L) && number != 0.0;

我们简单地拉出尾数并检查它是否为零(好吧,实际上是1,因为所有正常双打都有一个隐含的1)。如果这是真的,那么数字必须是2的幂,或0.如果你想让它适用于次正规数,那就更多了。