回答編集履歴

2

修正

2019/12/21 00:52

投稿

thkana
thkana

スコア7703

test CHANGED
@@ -1,12 +1,6 @@
1
- おっと、勘違いしてビット数数えてた
2
-
3
- 以下修正中...
4
-
5
-
6
-
7
1
  質問に書いてあるのに無理やりはめ込んでみました。まぁ、普通こんなことはしないと思いますが。
8
2
 
9
- main関数は自分で適宜修正して下さい。
3
+ main関数は自分で適宜修正して下さい。処理の意味に対して「整数%dの1bitの総数は%dです。」という言葉は不適切だと思います...
10
4
 
11
5
 
12
6
 
@@ -22,13 +16,13 @@
22
16
 
23
17
  } else {
24
18
 
25
- n = 0;
19
+ n = 2;
26
20
 
27
21
  }
28
22
 
29
23
  } else {
30
24
 
31
- n = parity(n / 2) + 1;
25
+ n = (3 * ( n % 2 ) ) ^ parity( n / 2 ) ;
32
26
 
33
27
  }
34
28
 
@@ -37,6 +31,26 @@
37
31
  }
38
32
 
39
33
  ```
34
+
35
+ Xor'^'がわかりにくければ、`n = (3 * ( n % 2 ) ) ^ parity( n / 2 )`はこの場合は
36
+
37
+ ```
38
+
39
+ if( parity( n / 2 ) == 2){
40
+
41
+ n = 1;
42
+
43
+ } else {
44
+
45
+ n = 2;
46
+
47
+ }
48
+
49
+ ```
50
+
51
+ とかでも動きは同じですのでよしなに。
52
+
53
+
40
54
 
41
55
 
42
56
 
@@ -50,11 +64,11 @@
50
64
 
51
65
  if(n != 0){
52
66
 
53
- ret = parity( n / 2 ) + n % 2;
67
+ ret = (3 * ( n % 2 ) ) ^ parity( n / 2 ) ;
54
68
 
55
69
  }else{
56
70
 
57
- ret = 0;
71
+ ret = 2;
58
72
 
59
73
  }
60
74
 

1

勘違い

2019/12/21 00:52

投稿

thkana
thkana

スコア7703

test CHANGED
@@ -1,3 +1,9 @@
1
+ おっと、勘違いしてビット数数えてた
2
+
3
+ 以下修正中...
4
+
5
+
6
+
1
7
  質問に書いてあるのに無理やりはめ込んでみました。まぁ、普通こんなことはしないと思いますが。
2
8
 
3
9
  main関数は自分で適宜修正して下さい。