2 Stimmen

Wie kann ich die Ausgabe eines Programms umkehren?

Ich muss Dezimalzahlen wie 43,62 in Binärzahlen umwandeln. Also habe ich zuerst ein Basic-Programm geschrieben, das 43 in Binärzahlen umwandelt. Aber ich bemerke, dass mein Programm die Binärzahl in umgekehrter Reihenfolge ausgibt, also 1 1 0 1 0 1 statt 1 0 1 0 1 1.

Mein Code:

#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;
}

4voto

ObscureRobot Punkte 7198

Anstatt jede Ziffer an cout zu senden, senden Sie sie an ein Array. Lesen Sie dann das Array in umgekehrter Reihenfolge aus. Oder schieben Sie sie auf einen Stapel und holen Sie sie dann vom Stapel zurück. Oder ...

3voto

David Heffernan Punkte 585606

Es ist ein bisschen wie ein Vorschlaghammer, um eine Nuss zu knacken, aber hier ist eine Lösung, die auf einem rekursiven Ansatz basiert:

#include <iostream>
using namespace std;

void OutputDigit(int number)
{
    if (number>0)
    {
        OutputDigit(number /= 2);
        cout << number % 2 << " ";
    }
}

int main()
{
    OutputDigit(43);
    return 0;
}

Sie können die gleiche Ausgabe wie zuvor erhalten, indem Sie einfach die cout eine Reihe!

1voto

Bill Punkte 13799

Blick auf vector und überlegen Sie, wie es sinnvoll sein könnte, die Reste zu speichern, anstatt sie gleich auszudrucken.

Beachten Sie, dass Sie die Dinge nicht an das Ende des Vektors setzen müssen. vector::insert können Sie eine Position angeben... könnte das hilfreich sein?

Alternativ dazu beginnt der von Ihnen erstellte Algorithmus mit der niedrigstwertigen Ziffer. Gibt es eine Möglichkeit, stattdessen mit der höchstwertigen Ziffer zu beginnen? Wenn ich die Zahl 42 habe ( 0101010 ), steht die höchstwertige Ziffer für die 32er und die 0 davor für die 64er. Was passiert, wenn ich 32 von 42 subtrahiere?

0voto

K-ballo Punkte 79342

Es wäre einfacher, die Ergebnisse zu speichern und sie dann rückwärts zu drucken. Die Rekursion ist eine weitere Möglichkeit, genau das zu tun.

0voto

Thomas Matthews Punkte 54757

Das höchstwertige Bit zuerst:

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();

Um das niedrigstwertige Bit zuerst zu drucken, ändern Sie die Richtung der for Schleife.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X