【C++】10進数から2進数への変換

未分類

C++で10進数から2進数への変換を行います。
2つの方法を整理しておきます。

やりたいこと
入力で受け取った10進数を2進数に変換したい。

87

方法1. 2で割るという操作を用いる。
(数学の授業で2で割り続ける筆算をしたことがある方もいるのではないかと思います。その操作を用いて2進数に変換します。)

#include<bits/stdc++.h>
using namespace std;

int main() {
    int n;
    cin >> n;   // 入力の受け取り

    string answer_string;   // string型でつくり, 最後にint型に変換する
    while (n != 0) {        // nは最終的に0になるまで2で割るという操作を繰り返す. 0になったら終了.
        if (n % 2 == 1) answer_string += "1";
        else answer_string += "0";
        n /= 2;
    }

    reverse(answer_string.begin(), answer_string.end());    // 文字列の順序を逆順にする
    int answer = stoi(answer_string);                       // int型への変換
    cout << answer << endl;                                 // 1010111が出力される
    return 0;
}

方法2. bitsetを利用する
入力は同じものを利用する

87
#include<bits/stdc++.h>
using namespace std;

int main() {
    int n;
    cin >> n;   // 入力の受け取り

    bitset<10> answer(n);   // 2進数の桁数を<>の中で指定している. この例では10を指定している.
    cout << answer << endl; // 0001010111が出力される
    return 0;
}

bitsetを利用する方法では、多めの桁数を指定してしまうと'0'で埋められてしまう。'0'で埋めたくない場合は若干工夫する必要がありそう。。

コメント