除了1!的阶乘外,其余数的阶乘均为偶数设N! 设
,
cm为某个自然数。N不等于1时Cm>=1,当N!表示成二进制位时候,m+1位必为1
。所以此问题等同于求N!中可以表示成求中的m的值,结果为m的值加1
int lowestOne(int N)
{
int Ret =0;
while(N)
{
N>>=1;
Ret+=N;
}
return Ret;
}
扩展问题:
给定整数n,判断是否为2的方幂
若某数为2的方幂,则二进制表示中只有1位为1设为100..0(共m位),该数n-1表示成二进制位01...1(共m位),可以发现n&(n-1)=0
bool isPowerOfTwo(int n)
{
return (n>0&&((n&(n-1)==0));
}