📜  数字到二进制字符串 c++ (1)

📅  最后修改于: 2023-12-03 15:10:17.036000             🧑  作者: Mango

数字到二进制字符串 c++

简介

将一个十进制数转换成对应的二进制字符串是编程中常见的问题。在 c++ 中,有很多种方法可以实现这个功能。本文将介绍四种常用的方法。

方法一:bitset

c++ 中的 bitset 类可以非常方便地将一个数字转换成二进制字符串,只需要将数字作为构造函数的参数即可。示例代码如下:

#include <bitset>
#include <iostream>
using namespace std;

int main() {
    int n = 10;
    bitset<32> b(n);
    string s = b.to_string();
    cout << s.substr(s.find('1'));
    return 0;
}

上述代码中,我们将数字 10 转换成一个 32 位的二进制数,再通过 bitset 的 to_string() 方法将其转换为一个字符串。代码中的 substr 函数则是将字符串中的前导零去除,以便于查看。

方法二:栈

将数字转换成二进制字符串的另一种常见方法就是使用栈。我们将数字不断除以 2,得到的余数入栈,最后将栈中的元素一一出栈就可以得到对应的二进制字符串。示例代码如下:

#include <stack>
#include <iostream>
using namespace std;

int main() {
    int n = 10;
    stack<int> s;
    while (n) {
        s.push(n % 2);
        n /= 2;
    }
    while (!s.empty()) {
        cout << s.top();
        s.pop();
    }
    return 0;
}

上述代码中,我们使用了两个栈,一个用于存放余数,一个用于存放二进制字符串。第一个 while 循环将每次的余数入栈,第二个 while 循环则将栈中的元素一一出栈并输出。

方法三:递归

使用递归也是实现将数字转换成二进制字符串常见的方法。对于当前的数字 n,我们可以将其除以 2 得到商 k 和余数 r,再递归地将 k 转换成二进制字符串并将其与 r 拼接起来。示例代码如下:

#include <iostream>
using namespace std;

string to_binary(int n) {
    if (n == 0) return "0";
    int k = n / 2, r = n % 2;
    return to_binary(k) + to_string(r);
}

int main() {
    int n = 10;
    cout << to_binary(n);
    return 0;
}

上述代码中,我们定义了一个 to_binary 函数,用于将数字转换成二进制字符串。其中,当数字为 0 时,直接返回字符串 "0";否则,我们将其除以 2 得到商 k 和余数 r,再递归地调用 to_binary 函数将 k 转换成二进制字符串并将其与 r 拼接起来。

方法四:移位运算

使用移位运算也可以实现将数字转换成二进制字符串的功能。我们从高位到低位依次取出每一位的值,可以将该数字不断右移 1 位并与 1 进行与运算,得到的结果就是该位的值。示例代码如下:

#include <iostream>
using namespace std;

int main() {
    int n = 10;
    string s = "";
    for (int i = 31; i >= 0; --i) {
        if ((n >> i) & 1) s += "1";
        else s += "0";
    }
    cout << s.substr(s.find('1'));
    return 0;
}

上述代码中,我们将数字右移 31 位到 0 位,并依次取出每一位的值,将其转换成对应的字符拼接成字符串。最后,我们再将字符串中的前导零去除以便于查看。