a132: 10931 - Parity

  1. 1. 內容
  2. 2. 範例輸入
  3. 3. 範例輸出
  4. 4. 想法
  5. 5. 程式碼

CPE 一顆星選集 49 道必考題

題目連結:https://zerojudge.tw/ShowProblem?problemid=a132

內容

整數 n (1 <= n < 2^31) 的「同位元」定義為:其二進位表示法中每位元的和再除以 2 的餘數。
例如:21 -> 10101 有三個 1,因此它的同位元為 3。

不斷輸入n求同位元,n = 0 結束。

範例輸入

1
2
10
21
0

範例輸出

The parity of 1 is 1 (mod 2).
The parity of 10 is 1 (mod 2).
The parity of 1010 is 2 (mod 2).
The parity of 10101 is 3 (mod 2).

想法

將n不斷除以二,取餘數放進stack,因堆疊特性,pop出來即為二進制。

程式碼

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <bits/stdc++.h>
#define fastio ios_base::sync_with_stdio(false), cin.tie(nullptr)
using namespace std;

int main(){
fastio;
int n, c;
stack <int> sta;
while(cin >> n && n){
c = 0;
cout << "The parity of ";
while(n > 0){
if(n & 1){
++c;
sta.push(1);
}
else sta.push(0);
n >>= 1;
}
while(!sta.empty()){
cout << sta.top();
sta.pop();
}
cout << " is " << c << " (mod 2).\n";
}
return 0;
}