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 🙂


Log in to reply