下面的代码采用 BigIntegern
并找到小于该数字的数字n
也是power of 2
. 它适用于小数字,但语句的第一个分支if
不适用于 int.MaxValue 及更高版本。对于较大的数字,显然减去1
( BigInteger.Log(n - 1)
) 是不够的。
我怎样才能计算出一个足够大的数字来减去它以产生影响,同时也可以处理较小的数字?
public BigInteger FindNearestPowerOfTwo (BigInteger n)
{
double number = 0;
BigInteger big = 0;
if (n.IsPowerOfTwo)
{
number = BigInteger.Log(n - 1) / BigInteger.Log(2);
}
else
{
number = BigInteger.Log(n) / BigInteger.Log(2);
}
number = Math.Floor(number);
big = BigInteger.Pow(2, (int) number);
return (big);
}