十进制到二进制C++

Decimal to Binary C++

本文关键字:C++ 二进制 十进制      更新时间:2023-10-16

我很清楚关于这个主题有一些重复的问题,尽管我发现每个问题都不能解决我的问题。首先,除了iostreamiomanipstring之外,我不能使用任何特殊的库。所以到目前为止我所拥有的是这个

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

由于@Cyber的回答在技术上解决了这个问题,我认为解释您的误解并没有什么坏处。您的函数DecToBin不会将十进制转换为二进制,而是将二进制转换为某种奇怪的二进制格式,该格式打印为十进制会为您提供二进制表示形式。问题是数字已经以二进制格式存储,并且通过转换器(如果您在源代码中使用常量)或io库(如果您使用std::cin输入)将其转换为二进制。当您使用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;
}