很简单的一道题,可以直接模拟,需要注意的是以一个负数结束,不要被样例的-1误导了。
代码如下:
View Code
1 #include <cstdio> 2 using namespace std; 3 4 int main() 5 { 6 int n, kase = 0; 7 while(scanf("%d", &n) != EOF) 8 { 9 if(n < 0) break; 10 kase++; 11 int num = 1, cnt = 0; 12 while(num < n) 13 { 14 num *= 2; 15 cnt++; 16 } 17 printf("Case %d: %d\n", kase, cnt); 18 } 19 return 0; 20 }
下面是用log函数算的,运行时间和上面代码时间一样,都是0.008s,应该是测试数据比较小,数据量也不多的缘故吧...
代码如下:
View Code
1 #include <cstdio> 2 #include <cmath> 3 using namespace std; 4 5 int main() 6 { 7 int n, kase = 0; 8 while(scanf("%d", &n) && n >= 0) 9 { 10 int ans; 11 if(!n) ans = 0; 12 else ans = (int)ceil(log(n)/log(2)); 13 printf("Case %d: %d\n", ++kase, ans); 14 } 15 return 0; 16 } 17