ziffernsumme einer 3-stelligen zahl


  • scheißdreck
  • 4602 Aufrufe 7 Antworten

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • ziffernsumme einer 3-stelligen zahl

    :read:
    hey leute
    ich fange gerade mit C++ an und habe ein Problem:ich soll ein Programm schreiben, das bei einer 3-stelligen Zahl die ziffernsumme berechnet(z.B.von 123=6) wie soll das gehen??
    :(
  • caste es in ein String
    Klar, das geht natürlich auch, aber es klappt auch einfacher hiermit :) und das auch mit n-stelligen Zahlen.

    PHP-Quellcode

    1. #include <iostream>
    2. using namespace std;
    3. int Quersumme (int zahl)
    4. {
    5. int rest = zahl % 10;
    6. zahl = zahl / 10;
    7. while ( ( zahl / 10 ) >= 1 )
    8. {
    9. rest = rest + ( zahl % 10 );
    10. zahl = ( zahl / 10 );
    11. }
    12. rest = rest + ( zahl % 10 );
    13. return rest;
    14. }
    15. int main()
    16. {
    17. cout << Quersumme(123);
    18. return 0;
    19. }
    Alles anzeigen


    In der Funktion Quersumme wird als erstes geprüft, ob die letzte Ziffer <> Null ist. Dazu benutzt man den Modulo Operator (%), der den Divisionsrest durch 10 liefert. im Beispiel die 3. Dann wird dieser Rest subtrahiert. Bleiben 120 übrig. Solange sich dieser Rest durch 10 teilen lässt, (while) wird geteilt, und wieder der Rest der Division geholt, und zu dem vorherigen Rest hinzuaddiert (hier: 120 / 10 = 12 -> 12 % 10 = 2 -> 3 + 2 = 5).
    Solange, bis nicht mehr ganzzahlig durch 10 geteilt werden kann.
    Dann noch eine Restdivision dazuaddiert und wir können das Ergebnis an main() zurückliefern.

    Das wars auch schon ;)

    Wenn du unsigned longint als Datentyp verwendest, klappt das auch mit Zahlen bis 2 hoch 32 = 2.147.483.647.


    Viel Spass beim testen ...
  • Das kostet aber viel mehr Rechenleistung


    Stimmt. Aber darum ging es ihm wohl nicht.

    Gefragt war nach einer möglichst einfachen Lösung, nicht nach optimaler Laufzeit ;) Ich denke auch, dass lineare Laufzeit schon OK ist ...

    Wenn du trotzdem noch eine performantere Lösung posten willst, bitte ...

    EDIT: Scheint nicht so... Damit:

    --- CLOSED ---