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)
