C++程序 十进制转二进制

来源:这里教程网 时间:2026-02-16 16:08:42 作者:

C++程序 十进制转二进制

给定一个十进制数作为输入,我们需要编写一个程序将给定的十进制数转换为等效的二进制数。

示例:

输入: 7
输出: 111

输入: 10
输出: 1010

输入: 33
输出: 100001

例如:

如果十进制数为10。

步骤1 :当10除以2时余数为零。因此,arr [0] = 0。

步骤2 :将10除以2。新数字是10/2 = 5。

步骤3 :当5除以2时余数为1。因此,arr [1] = 1。

步骤4 :将5除以2。新数字是5/2 = 2。

步骤5 :当2除以2时余数为零。因此,arr [2] = 0。

步骤6 :将2除以2。新数字是2/2 = 1。

步骤7 :当1除以2时余数为1。因此,arr [3] = 1。

步骤8 :将1除以2。新数字是1/2 = 0。

步骤9 :由于数字变成=0.倒序打印数组。因此,等效的二进制数为1010。

下面的图示示例将十进制数17转换为等效的二进制数。

以下是上述思路的实现。

// C++程序将十进制数转换为二进制数#include <iostream>using namespace std;  // 将十进制转换为二进制的函数void decToBinary(int n){    // 数组存储二进制数    int binaryNum[32];      // 二进制数组的计数器    int i = 0;    while (n > 0)     {        // 将余数存储在二进制数组中        binaryNum[i] = n % 2;        n = n / 2;        i++;    }      // 倒序打印二进制数组    for (int j = i - 1; j >= 0; j--)        cout << binaryNum[j];}  // 主程序int main(){    int n = 17;    decToBinary(n);    return 0;}  

输出:

10001

时间复杂度: O(logn)

辅助空间: O(1)

我们可以使用位运算符来完成上述工作。 注意,位运算符比上述使用的算术运算符更快。

// C++程序使用位运算符将十进制转换为二进制//// 假设一个整数的大小为32位#include <iostream>using namespace std;  // 将十进制转换为二进制的函数int decToBinary(int n){    // 假设整数的大小为32位    for (int i = 31; i >= 0; i--)     {        int k = n >> i;        if (k & 1)            cout << "1";        else            cout << "0";    }}  // 主程序int main(){    int n = 32;    decToBinary(n);}  

输出:

00000000000000000000000000100000

时间复杂度: O(1)

循环每次都运行常数(32)次,即使是小数。

辅助空间: O(1)

高效的方法:

这是另一种使用右移(>>)和按位与(&)运算符将十进制转换为二进制的高效方法。在这里,我们将仅使用二进制运算符,这些运算符通常计算非常快。

// C++程序实现上述方法#include using namespace std;string DecimalToBinary(int num){    string str;    while(num)    {        // 1        if(num & 1)             str+='1';        // 0        else                str+='0';        // 右移一位          num>>=1;    }                 return str;}void reverse(string str){    for(int i=str.size()-1 ; i>=0 ; i--)        cout<< str[i]; }// 主函数int main() {    int num = 59;    cout<< "num 59的二进制为: ";    reverse( DecimalToBinary(num));    return 0;}  

输出:

num 59的二进制为: 111011

时间复杂度: O(log n)

辅助空间: O(1)

可以使用没有数组的方法进行十进制到二进制转换。

// C++实现上述方法#include #include using namespace std;#define ull unsigned long long int// 返回十进制值N的二进制值int decimalToBinary(int N){    // 存储二进制数    ull B_Number = 0;    int cnt = 0;    while (N != 0)    {        int rem = N % 2;        ull c = pow(10, cnt);        B_Number += rem * c;        N /= 2;        // 用于存储指数值        cnt++;    }    return B_Number;}// 主函数int main(){    int N = 17;    cout << decimalToBinary(N);    return 0;}  

输出:

10001

时间复杂度: O(logn)

辅助空间: O(1)

请注意,此方法类似于将二进制转换为十进制的方法,如本帖子所讨论的一样。 还有一种方法可以将任何十进制数转换为其二进制形式。想法是使用 bitset

以下是上述方法的实现。

// C++程序将一个十进制数字转换为二进制形式。// 包含头文件#include using namespace std;// 将十进制数转换为二进制形式的函数string decimalToBinary(int n){    // 找到数字的二进制形式并将其转换为字符串。    string s = bitset<64> (n).to_string();    // 查找第一次出现的“1”    // 消去前导零。    const auto loc1 = s.find('1');    if(loc1 != string::npos)        // 依据索引位置进行字符串切片        return s.substr(loc1);    return "0";}// 主函数int main(){    int n = 17;    // 调用函数    cout << decimalToBinary(n);    return 0;}  

输出:

10001

时间复杂度: O(logn)

辅助空间: O(1)

另一种方法:

// C++程序将十进制转换为二进制数#include using namespace std;// 主函数int main(){    // 输入数字    int number = 15;    int n = (int)(log2(number));    // 二进制输出    // 使用内置函数    cout << "二进制数为 : " << bitset<64>(number).to_string().substr(64 - n - 1);}  

输出:

二进制数为 : 1111

时间复杂度: O(logn)

辅助空间: O(1)

相关推荐