// C++ program to convert a decimal
// number to binary number
#include <iostream>
using namespace std;
// function to convert decimal to binary
void decToBinary(int n)
{
// array to store binary number
int binaryNum[1000];
// counter for binary array
int i = 0;
while (n > 0) {
// storing remainder in binary array
binaryNum[i] = n % 2;
n = n / 2;
i++;
}
// printing binary array in reverse order
for (int j = i - 1; j >= 0; j--)
cout << binaryNum[j];
}
// Driver program to test above function
int main()
{
int n = 17;
decToBinary(n);
return 0;
}这是一个把十进制数转换成二进制的程序。现在,我正在尝试将十进制数转换为BCD。例如,如果我有一个像215这样的数字,我将每个数字2,1,5分开,然后将每个数字转换为二进制,因此它将是0010,001,0101。我只是对实现它感到困惑。
发布于 2018-01-17 07:27:40
首先,您的算法只是显示一些数字n的二进制表示,而不是将其分成单个数字并返回它们的一些二进制表示集。
为了让生活变得更简单,我们将使用标准容器和标准算法:
...例如,如果我有一个像215这样的数字,我将每个数字2,1,5分开,然后将每个数字转换为二进制,因此它将是0010,001,0101
很好,这意味着我们需要某种容器来容纳这三个表示,不是吗?我的选择是std::vector,因为它非常简单和高效!你可以阅读更多关于它的here。
前面提到的vector最终将存储二进制表示,但在这里我们遇到了另一个问题--我们实际上需要以某种方式表示它们!
幸运的是,该标准为我们提供了一个很好的工具- std::bitset,它在here中得到了解释。它主要用于简化二进制操作,但它的一个伟大特性是,它也非常擅长简单地作为二进制表示。
最后一个函数可能如下所示:
auto dec_to_bin(int n)
{
std::vector<std::bitset<4>> repr;
while(n > 0){
repr.push_back(std::bitset<4>(n % 10));
n /= 10;
}
std::reverse(repr.begin(), repr.end());
return repr;
}这是怎么回事?
我们首先创建一个固定大小的位集(大小为4,因为每个十进制数可以表示为四个二进制数)的vector,然后只要我们的n大于零(您已经知道为什么-您在您的代码中使用相同的逻辑),我们添加(使用push_back)一个新的位集,它将被视为您的数字的模数(即最后一个数字)的二进制表示。
但请记住,通过这样做,我们以相反的顺序创建了vector。我们要做的最后两件事就是reverse并返回它!
最后,我们可以这样使用main中的函数:
int main()
{
for(auto b : dec_to_bin(215)){
std::cout << b << ' ';
}
}这将打印0010 0001 0101,这是您想要的数字215的输出
发布于 2018-01-17 07:05:06
不能将%2和/2替换为% 10和/ 10吗?变量的命名是错误的,但这是算法上的变化。
发布于 2018-01-17 07:10:50
您只需将整数除以数字,然后为每个数字调用您的函数:
void decToBCD(int n) {
// array to store digits
int digits[10];
// counter for digits
int i = 0;
while (n > 0) {
// storing remainder in digit array
digits[i] = n % 10;
n = n / 10;
i++;
}
// printing binary representation of digits
for (int j = i - 1; j >= 0; j--) {
decToBinary(digits[j]);
cout << " ";
}
}https://stackoverflow.com/questions/48291111
复制相似问题