0 Daumen
6,4k Aufrufe

Hallo Ich habe folgende Probleme.

1. Problem

Wenn ich eine Dezimalzahl eingebe, kommt die Binärzahl umgekehrt raus
Beispiel: Für die Dezimalzahl 8 wird 0001 outgeputtet. Statt 1000.

2. Problem

Bei grossen Zahlen funktioniert der Output nicht mehr.
Bsp: Dezimalzahl 4000000000 (4 mia) wird lauter 111111111111111111111 ausgespuckt was nicht stimmen kann.


Frage
Kann mir jemand helfen? Wir sind immer noch bei den Basics und ich sollte eine Lösung haben die vielleicht nicht mega komplexe Sachen wie Strings oder Arrays usw hat. Im internet selbst gibt es ja viele Codes, aber die sind mit dem Stoff, den wir haben nicht vereinbar.

Mein Code

#include <iostream>

int main()
{
 int n;
 std::cout <<"Enter a decimal number";
 std::cin >> n;
 
 while (n > 0)
{
  std::cout << n % 2 && !0;
  n/=2;
}

return 0;
}
Avatar von

Also ich hab per 

unsigned int den Wertebereich in den Positivbereich verschoben. 

Jetzt habe ich nur noch das Problem dass es mir die Zahlen verkehrt anzeigt:

Frage: Gibt es einen Befehl, mit dem ich den OUTPUT sozusagen spiegeln kann?

Beispiel:

    input:
    4000000000
    expected output:
    11101110011010110010100000000000
    actual output:
    Enter a decimal number00000000000101001101011001110111

Zur Kontrolle: https://www.matheretter.de/rechner/zahlenkonverter/?d=4000000000

Dezimal: 4000000000

Binär: 11101110011010110010100000000000

Das Problem kommt zustande, da int bei C++ nur einen Bereich von 2^32 abdeckt. Nutze stattdessen: long long.

Vielen Dank!


Das Problem mit dem Wertebereich habe ich per unsigned int gelöst.

Mein Programm gibt mir gerade diese 4 mia als verkehrt,gespiegelte binärzahl aus. Also nicht in der Reihenfolge wie der Konverter es ausgibt.


Kannst du da helfen ?

1 Antwort

+1 Daumen
 
Beste Antwort

Das Problem kommt zustande, da int bei C++ nur einen Bereich von 2^{32} abdeckt. Nutze stattdessen: long long.

Wir können ohne Array auskommen, doch string sei erlaubt, da der Datentyp die Arbeit sehr vereinfacht bzw. wir die Binärzahl damit richtig herum zusammensetzen können:

#include <iostream>
#include <string>

int main()
{
long long n;
std::cout <<"Enter a decimal number";
std::cin >> n;
std::string result;

while (n > 0)
{
  result = std::to_string(n % 2) + result;
  n /= 2;
}

std::cout << result;
return 0;
}

Wir müssen das Ergebnis aus n%2 in einen String umwandeln, damit wir die Teile mittels der Variable result zusammensetzen können. Hierzu verwenden wir die Funktion to_string().

Programm starten: https://repl.it/@kaibox99/stacklounge-3238

Avatar von

Ich verstehe bis auf eine Sache alles:

  while (n > 0)
{
  result = std::to_string(n % 2) + result;
  n /= 2;
}

Was sagst du mit to_string?

to_string() wandelt die Zahl (Integer) in einen String um. Das ist notwendig, damit man die Zahlen zusammensetzen darf. Andernfalls klappt es nicht.

Du kannst ja mal versuchen:

result = (n % 2) + result;

und schauen was da herauskommt :)

Ein anderes Problem?

Stell deine Frage

Willkommen bei der Stacklounge! Stell deine Frage einfach und kostenlos

x
Made by a lovely community