Erledigt Danke Umkehrung Ziffernfolge



  • /*Aufgabe 2.3
    Schreiben Sie ein Programm, das eine dreistellige Zahl einliest
    und die Zahl ausgibt, die durch Umkehrung der Ziffernfolge entsteht.
    z.B.: Eingabe: 123 Ausgabe: 321)
    */
    Bin Programmieranfänger.
    Ich habe es zwar jetzt gelöst aber ich würde gerne Wissen wie es einfacher auch geht........Modulo muss sein, Schleife? weniger Variablen?

    #include <iostream>
    
    using namespace std;
    
    int main()
    {
    int a,b,c,zahl;   
    
    cout<<"Bitte geben Sie eine dreistellige Zahl ein"<<endl;
    cin>>zahl;
    
    a=zahl%10;
    zahl/=10;
    b=(a*10)+(zahl%10);
    zahl/=10;
    c=(b*10)+zahl;
    
    cout<<c;
    
    }
    

    /edit pumuckl: cpp-Tags, demnächst bitte selber machen!



    1. Zahl nicht als Zahl sondern als string einlesen.
    2. überprüfen, ob der string die Länge 3 hat und alle elemente Ziffern sind
    3. umgekehrt ausgeben (reverse_iterator)


  • Naja, die Frage ist arg unterspezifiziert, wenn der Aufgabensteller die Verwendung des %-Operators sehen will. Ohne geht's natürlich auch:

    #include <iostream>
    #include <ostream>
    #include <string>
    #include <algorithm>
    
    using namespace std;
    
    int main()
    {
      cout << "Eingabe:";
      string s;
      cin >> s;
      reverse(s.begin(),s.end());
      cout << s << endl;
    }
    

    Und sonst kannst Du natürlich in einer eigenen Schleife die einzelnen Ziffern ausgeben, statt 3mal fast das Gleiche hintereinander in der main-Funktion zu machen.

    Und lokale Variablen würde ich auch immer erst dann definieren, wenn ich sie brauche.


  • Mod

    Am Originalcode ist am Algorithmus an sich nichts auszusetzen. Stilistisch kann man das noch verbesern, indem aussagekräftigere Bezeichner gewählt werden.
    Verallgemeinert könnte das Ganze so aussehen:

    cout<<"Bitte geben Sie eine Zahl ein"<<endl;
    unsigned input = 0;
    cin >> input;
    
    unsigned result = 0;
    while ( input != 0 )
    {
        unsigned digit = input % 10;
        input /= 10;
        result = 10 * result + digit;
    }
    
    cout << result;
    

    Weil ich mich nicht mit negativen Zahlen herumschlagen wollte, habe ich vorzeichenlose Zahlen benutzt. Im Prinzip müsste man dann zusätzlich noch mit Überläufen umgehen (oder man beschränkt die maximale Größe der Eingabe).



  • danke sehr

    camper schrieb:

    Am Originalcode ist am Algorithmus an sich nichts auszusetzen. Stilistisch kann man das noch verbesern, indem aussagekräftigere Bezeichner gewählt werden.
    Verallgemeinert könnte das Ganze so aussehen:

    cout<<"Bitte geben Sie eine Zahl ein"<<endl;
    unsigned input = 0;
    cin >> input;
    
    unsigned result = 0;
    while ( input != 0 )
    {
        unsigned digit = input % 10;
        input /= 10;
        result = 10 * result + digit;
    }
    
    cout << result;
    

    Weil ich mich nicht mit negativen Zahlen herumschlagen wollte, habe ich vorzeichenlose Zahlen benutzt. Im Prinzip müsste man dann zusätzlich noch mit Überläufen umgehen (oder man beschränkt die maximale Größe der Eingabe).


Anmelden zum Antworten