这道题就是求logn的问题,简单的用辅助数据来模拟过程。代码如下,
#include <stdio.h>
int main()
{
int i;
unsigned long long m[64],n;
m[0] = 1;
for (i=1;i<64;i++)
m[i] = m[i-1]<<1;
while(EOF != scanf("%llu",&n))
{
for(i=0;i<64 && n > m[i];i++) ;
printf("%d\n", i);
}
return 0;
}
也可以用log2l来计算, 然后判断结果是否为整。
#include <stdio.h>
#include <math.h>
int main()
{
long long n;
long double r;
int i;
while(EOF != scanf("%llu", &n))
{
r = log2l(n);
i = (int)r;
if (r > i) i++;
printf("%d\n", i);
}
return 0;
}