我很清楚这个主题有一些重复的问题,虽然我找到的每个问题都没有解决我的问题。首先,我不能使用除iostream
,iomanip
和string
之外的任何特殊库。所以我到目前为止就是这个
int DecToBin(int num)
{
int bin = 0;
while (num > 0)
{
bin += (num % 2);
//cout << bin << endl; this is used for debugging purposes
num = num / 2;
}
return bin;
}
我称之为
int binary = DecToBin(170);
cout << binary << endl;
除了我持续0,我相信是因为数据类型我也设置了它。所以我的问题是如何获得正确的输出呢?我的结果也应该是
10101010 is base 10 of 170
答案 0 :(得分:1)
由于@ Cyber的答案在技术上解决了这个问题,我认为解释你的误解并不会有什么坏处。您的函数DecToBin
不会将十进制转换为二进制,而是二进制转换为一些奇怪的二进制格式,它以十进制格式打印,为您提供二进制表示。问题是数字已经以二进制格式存储,并且如果您使用std::cin
输入,则通过翻译器(如果您在源代码中使用常量)或io库将其转换为二进制。当您使用std::cout
在控制台上打印时,同一个库会将其从二进制转换回十进制(默认情况下),这导致您的想法,该数字以十进制格式存储。
从技术上讲,你的解决方案是有效的,但我不确定你的教授会接受它,因为它表明你不理解这个概念(我不会)。正确的解决方案是将int转换为二进制字符串,然后将其输出到std::cout
:
std::string binary( unsigned int n )
{
std::string s;
for( ; n > 0; n /= 2 )
s = std::to_string( n % 2 ) + s;
return s;
}
int main()
{
int n = 170;
std::cout << "binary representation of " << n << " is " << binary( n )
<< std::endl;
}