2011-10-20 88 views
2

我必須將像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; 
} 
+1

如果這是家庭作業,不要忘了功課標籤。 – ObscureRobot

+1

+1分享你的努力 – SpeedBirdNine

回答

3

而不是發送每個數字來清點的,送他們到一個數組。然後以相反的順序讀取數組。或者將它們推入堆棧,然後將它們從堆棧中彈出。或...

+0

我對數組有一點了解,但是我的班級還沒有學到這個,所以我不知道我是否應該使用一種在課堂上沒有涉及的方法。還是應該? – DEdesigns57

+4

軟件開發的第一條規則是知識可以克服所有問題。預讀並瞭解陣列!和堆棧!和鏈表!繼續前進,直到你的頭部爆炸。不要停在那裏。 – ObscureRobot

0

存儲結果然後向後打印會更容易。使用遞歸也是另一種可能性。

1

看看vector並思考如何保存剩餘部分而不是立即打印它們。

請注意,您不必將事物放在向量的末尾。 vector::insert可以讓你指定一個位置......這可能有幫助嗎?

或者,您創建的算法從最低有效位開始。有沒有辦法從最重要的數字開始呢?如果我的數字是42(0101010),那麼最高位數字代表32位數字,而0位數字代表64位數字。如果我從42中減去32,會發生什麼?

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一行之前有!

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循環的方向。

0

在C++中,你也可以使用一個bitset容器要做到這一點,

#include <bitset> 

int i = 43; 
std::bitset<sizeof(int)*CHAR_BIT> bin(i); 
0

只需使用字符串函數

string s ; 

while(number != 0) 
{ 
    remainder = number % 2; 
    string c = remainder ? "1": "0"; 
    s.insert(s.begin(),c.begin(),c.end()); 
    number /= 2; 
} 
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位去,並檢查該位是開啓還是關閉,並打印是否發生相應。

0

最好的選擇 - 使用C++字符串流格式化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;