回答編集履歴

1

別解の追加

2020/04/28 02:37

投稿

kazuma-s
kazuma-s

スコア8224

test CHANGED
@@ -21,3 +21,61 @@
21
21
  ```
22
22
 
23
23
  1u がキモです。
24
+
25
+
26
+
27
+
28
+
29
+ **追記**
30
+
31
+ 別解
32
+
33
+ ```C
34
+
35
+ #include <stdio.h>
36
+
37
+
38
+
39
+ int main(void)
40
+
41
+ {
42
+
43
+ int n, k = 0;
44
+
45
+ scanf("%d", &n);
46
+
47
+ if (--n > 0) {
48
+
49
+ k = 1;
50
+
51
+ if (n > 0xffff) n >>= 16, k += 16;
52
+
53
+ if (n > 0x00ff) n >>= 8, k += 8;
54
+
55
+ if (n > 0x000f) n >>= 4, k += 4;
56
+
57
+ if (n > 0x0003) n >>= 2, k += 2;
58
+
59
+ if (n > 0x0001) n >>= 1, k += 1;
60
+
61
+ }
62
+
63
+ printf("%d\n", k);
64
+
65
+ }
66
+
67
+ ```
68
+
69
+ 2 のべき乗は、0乗、1乗、2乗、... だから、1、2、4、...。
70
+
71
+ n が 0 の時、それ以上の 2 のべき乗は 1。回数は 0。
72
+
73
+ n が 1 の時、それ以上の 2 のべき乗は 1。回数は 0。
74
+
75
+ n が 2 の時、それ以上の 2 のべき乗は 2。回数は 1。
76
+
77
+ n が 3 の時、それ以上の 2 のべき乗は 4。回数は 2。
78
+
79
+ n が 4 の時、それ以上の 2 のべき乗は 4。回数は 2。
80
+
81
+ n が 5 の時、それ以上の 2 のべき乗は 8。回数は 3。