2014-12-04 159 views
0

我很清楚在这个主题上有一些重复的问题,尽管我发现每个问题都不能解决我的问题。除此之外,我不能使用iostreamiomanipstring以外的任何特殊库。所以,我有什么到目前为止,这是十进制到二进制C++

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 
+1

可以非常轻松地使用['的std :: bitset的:: to_string()'](HTTP来完成.com/w/cpp/utility/bitset) – 2014-12-04 17:50:06

+0

这是已经预先存在的还是需要一个库? – EasyBB 2014-12-04 17:56:00

+0

@EasyBB它包含在标准C++库中的'#include ' – CoryKramer 2014-12-04 17:56:46

回答

1

作为@ Cyber​​的答案在技术上解决了这个问题,我认为这不会伤害解释你的误解。您的函数DecToBin不会将十进制转换为二进制,而是将二进制转换为一些奇怪的二进制格式,这些二进制格式将作为十进制打印,从而为您提供二进制表示形式。问题在于,如果您使用std::cin进行输入,则数字已经以二进制格式存储,并且已被转换器(如果您在源代码中使用常量)或io库转换为二进制。当您在控制台上使用std::cout打印它时,同一个库会将它从二进制转换回十进制(默认情况下),这导致您的想法,该数字以十进制格式存储。

所以技术上你的解决方案有效,但我不确定你的教授会接受它,因为它表明你不了解这个概念(我不会)。正确的解决办法是将INT转换为二进制字符串,然后输出到std::cout://en.cppreference:

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; 
}  
+0

除了你的一些代码的问题,教授不喜欢他没有教过的东西。我做了很多,因为我一直在编程,C++我是新手,所以我一直在阅读文档,这种情况是eof()和无符号的,long,double,to_string我的意思是说他只是教他们的大小和长度大声笑感谢您的帖子,虽然队友。 – EasyBB 2014-12-04 20:43:46