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

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++程序 十进制转二进制

以下是上述思路的实现。

// 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)

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程