eingegebene Zahl in umgekehrte Richtung ausgeben - reverse digits
-
Hallo
ich lern an der Uni gerade C++ und hab bei folgender Einstiegsaufgabe ein Problem. Man soll eine eingegebene Zahl (bis zu 8 Ziffern) in umgekehrter Reihenfolge ausgeben. Das ist eigentlich an und für sich ja keine grosse Sache, bzw. ich habe das über eine rekursive Methode gelöst:
#include <iostream> using namespace std; int reverse_digits( int number ) { if (number < 10) { cout << number; } else { cout << number % 10; reverse_digits(number / 10); } return 0; } int main( int argc, const char* argv[] ) { int number; cout<<"Enter a number that at most has eight digits:"; cin >> number; cout << "Reverse number is "<< reverse_digits(number) <<endl ; return 0; }das Problem ist hierbei aber, dass meine rekursive Methode reverse_digits natürlich bei jedem Durchlauf über cout eine Zahl ausgibt. Ich bräuchte jetzt einen Tipp, wie ich die komplette umgekehrte Zahl aber an die main Funktion übergebe, damit cout << "Reverse number is "<< reverse_digits(number) <<endl ; die Lösung dann ausgibt?
Nur um sicher zustellen: bitte keine fertigen Lösungen posten, mir wäre es lieber, wenn mir einfach die Richtung gezeigt wird.

grüsse
-
Statt die Ziffern auszugeben, setzt du sie einfach immer vor den Rückgabewert vom nächsten Aufruf von reverse_digits. Mit Strings wäre das recht einfach, mit int geht's aber auch.
Um z.B. 7 vor 123 zu setzen, rechnet man 7*1000+123=7123, was sich durch int zusammengesetzteZahl=pow(10,int(log10(bisherigeZahl))+1)*ersteZiffer+bisherigeZahl; ausdrücken lässt.
Iterativ wäre es (mit Strings) aber einfacher, dann musst du nur das erste mit dem letztem Zeichen, das zweite mit dem zweitletzten vertauschen (mit std::swap) usw.
-
danke für die Antwort. Das mit dem Swap habe ich gar nicht berücksichtigt. Ich versuche das gleich mal aus.
-
string str; cin >> str; reverse( str.begin(), str.end() ); cout << str;
-
habs jetzt so gelöst:
int revers_digits(int number) { int rev_number = 0; while(number > 0) { rev_number = rev_number * 10 + number % 10; number = number / 10; } return rev_number; }reicht soweit für meine ansprüche
