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)