「十進法 → 二進法」変換。これも鉄則本公式解説とは異なる方法でやってみよう。
問題概要
二進法で表記された整数 が与えられる。
整数 の十進法表記を求めよ。
解法
たとえば、二進法で表された整数 1101 は、十進法では、次のように計算できる。
このように「 の値」を求めて、それらを足すことで求められる。この方法が鉄則本公式解説に書いてある。
もう一つの方法
しかし、もう一つ有名な方法がある。それは、二進法で表された整数 1101 を、左から順に桁の値を見ていき、
- 2 をかける
- その桁の値を足す
を繰り返す方法だ。値 から出発して、次の表のような手続きで計算できる。
桁の値 | 2 をかける | その桁の値を足す |
---|---|---|
1 | |
|
1 | |
|
0 | |
|
1 | |
|
このようにして、0 から出発して、最終的な値 13 が得られた。この手続きをそのまま実装することで AC が得られる。
解答例コード
#include <bits/stdc++.h> using namespace std; int main() { string N; cin >> N; int res = 0; for (auto c : N) { res *= 2; // 2 をかける res += c - '0'; // その桁の値を足す } cout << res << endl; }