2014-12-04 96 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