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出來即為二進制。
程式碼
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; }
|