CPE 一顆星選集 49 道必考題
題目連結:https://zerojudge.tw/ShowProblem?problemid=e545
內容
給定一個十進制整數 N (0 < N <= 9999),分別計算將 N 當作十進位數值以及十六進位數值,轉換成二進位共有幾個 1 。
輸入第一列 T (0 < T <= 1000)代表測資數。
範例輸入
3
265
111
1234
範例輸出
3 5
6 3
5 5
想法
若是將 N 當成十進位看,直接轉二進位計算。若是當十六進位看,先將其轉為十進位,再轉二進位。
程式碼
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 28 29 30 31 32 33 34 35 36 37
| #include <bits/stdc++.h> #define fastio ios_base::sync_with_stdio(false), cin.tie(nullptr) using namespace std;
void dec(int); void hex(int); int main(){ fastio; int T, N; cin >> T; while(T--){ cin >> N; dec(N); hex(N); } } void dec(int n){ int c = 0; while(n > 0){ if(n & 1) ++c; n >>= 1; } cout << c << " "; } void hex(int n){ int c = 0, dig = 0, num = 0, temp; while(n > 0){ num += (n % 10) * pow(16, dig); n /= 10; ++dig; } while(num > 0){ if(num & 1) ++c; num >>= 1; } cout << c << "\n"; }
|