C++ :: Aufgabe #333 :: Lösung #1

2 Lösungen Lösungen öffentlich
#333

Fröhliche Zahlen (Happy Number)

Fortgeschrittener - C++ von JKooP - 28.02.2021 um 10:24 Uhr
Von einer fröhlichen Zahl spricht man, wenn eine natürliche Ausgangszahl (Integer)
nach einer bestimmten Iterationsvorschrift am Ende den Zielwert 1 hat.

Die Iterationsvorschrift hier:
Die Summe der Quadrate aller Ziffern einer Zahl.
Wiederholen des Prozesses mit der neu entstandenen Zahl, bis am Ende
das Ergebnis entweder 1 (true) ist oder die Schleife unendlich weiterläuft (false).

Beispiel Glückliche Zahl:
Zahl 19
1² + 9² = 82
8² + 2² = 68
6² + 8² = 100
1² + 0² + 0² = 1

Beispiel unendlich:
Zahl 2
2² = 4
4² = 16
1² + 6² = 37
3² + 7² = 58
5² + 8² = 89
8² + 9² = 145
...

Aufgabe 1 (mittel):
Erstelle eine Methode/Funktion, die als Ergebnis bei einer Glücklichen Zahl den Wert true
und ansonsten false zurückgibt. Dabei können mehrere Schleifen ineinander verschachtelt werden.

Aufgabe 2 (schwieriger):
Wie Aufgabe 1, aber mit nur einer Schleife.

Viel Spaß
#1
vote_ok
von felixTheC (1200 Punkte) - 04.03.2021 um 14:09 Uhr
Quellcode ausblenden C-Code
#include <iostream>
#include <math.h>

bool isHappyNumber(int &num, int maxTries = 10);

int main() {

    int number;

    std::cout << "Is your number a happy number??.\nLet's find out: ";
    std::cin >> number;

    std::cout << number;

    switch (isHappyNumber(number)) {
        case 1:
            std::cout << " is a happy number.";
            break;
        default:
            std::cout << " is not a happy number.";
            break;
    }

    return 0;
}

bool isHappyNumber(int &num, int maxTries)
{
    std::string str_num = std::to_string(num);
    int result = 0;

    for (auto val: str_num) {
        int tmp = std::atoi(&val);
        result += pow(tmp, 2);
    }

    if (result == 1)
    {
        return true;
    } else
    {
        if (maxTries == 1)
        {
            return false;
        } else
        {
            return isHappyNumber(result, --maxTries);
        }
    }
}

Kommentare:

Für diese Lösung gibt es noch keinen Kommentar

Bitte melden Sie sich an um eine Kommentar zu schreiben.
Kommentar schreiben