我必须将43.62之类的十进制数转换为二进制数。所以我首先编写了一个将43转换为二进制的基本程序。但是我注意到我的程序反向打印出二进制数,所以它打印1 1 0 1 0 1而不是1 0 1 0 1 1.如何解决这个问题。
我的代码:
#include <iostream>
using namespace std;
int main()
{
int number;
int remainder;
cout << "Enter a integer: ";
cin >> number;
while(number != 0)
{
remainder = number % 2;
cout << remainder << " ";
number /= 2;
}
int pause;
cin >> pause;
return 0;
}
答案 0 :(得分:3)
不是将每个数字发送到cout,而是将它们发送到数组。然后以相反的顺序读出数组。或者将它们推入堆栈,然后将它们从堆栈中弹回。还是......
答案 1 :(得分:2)
大锤要破解坚果,但这是基于递归方法的解决方案:
#include <iostream>
using namespace std;
void OutputDigit(int number)
{
if (number>0)
{
OutputDigit(number /= 2);
cout << number % 2 << " ";
}
}
int main()
{
OutputDigit(43);
return 0;
}
只需移动cout
一行即可获得与之前相同的输出!
答案 2 :(得分:1)
查看vector
并考虑如何保存余数而不是立即打印它们。
请注意,您不必将内容放在向量的末尾。 vector::insert
允许您指定一个位置......这可能有用吗?
或者,您创建的算法从最低位数开始。有没有办法从最重要的数字开始?如果我有数字42(0101010
),则最高有效数字代表32s,而它前面的0代表64s。如果我从42中减去32,会发生什么?
答案 3 :(得分:0)
存储结果然后向后打印会更容易。使用递归也是另一种可能性。
答案 4 :(得分:0)
最重要的是第一位:
const unsigned int BITS_PER_INT = CHAR_BIT * sizeof(int);
char bit_char = '0';
for (int i = BITS_PER_INT - 1;
i > 0;
--i)
{
bit_char = (value & (1 << i)) ? '1' : '0';
cout << bit_char << ' ';
}
cout << '\n';
cout.flush();
要先打印最低有效位,请更改for
循环的方向。
答案 5 :(得分:0)
在C ++中,您还可以使用bitset容器来执行此操作,
#include <bitset>
int i = 43;
std::bitset<sizeof(int)*CHAR_BIT> bin(i);
答案 6 :(得分:0)
只需使用字符串函数
string s ;
while(number != 0)
{
remainder = number % 2;
string c = remainder ? "1": "0";
s.insert(s.begin(),c.begin(),c.end());
number /= 2;
}
答案 7 :(得分:0)
当您通过保留余数进行此类转换时,结果将始终还原。建议使用bitwise &
:
unsigned char bit = 0x80; // start from most significant bit
int number = 43;
while(bit)
{
if( bit & number ) // check if bit is on or off in your number
{
cout << "1";
}
else
{
cout << "0";
}
bit = bit >>1; // move to next bit
}
此示例将开始浏览该数字的所有8位,并检查该位是打开还是关闭并相应打印。
答案 8 :(得分:0)
最佳选择 - 使用C ++ stringstream格式化I / O
// Add the following headers
#include <sstream>
#include <algorithm>
// your function
stringstream ss;
// Use ss in your code instead of cout
string myString = ss.str();
std::reverse(myString.begin(),myString.end());
cout << myString;