Сильное число в C++: методы определения строгости числа

Под «сильным числом» в математике понимается число, равное сумме факториала его цифр. Чтобы определить, является ли число сильным числом в C++, вы можете использовать следующие методы:

Метод 1: использование цикла

#include <iostream>
int factorial(int num) {
    if (num == 0 || num == 1)
        return 1;
    else
        return num * factorial(num - 1);
}
bool isStrongNumber(int number) {
    int temp = number;
    int sum = 0;
    while (temp != 0) {
        int digit = temp % 10;
        sum += factorial(digit);
        temp /= 10;
    }
    return sum == number;
}
int main() {
    int number;
    std::cout << "Enter a number: ";
    std::cin >> number;
    if (isStrongNumber(number))
        std::cout << number << " is a strong number." << std::endl;
    else
        std::cout << number << " is not a strong number." << std::endl;
    return 0;
}

Метод 2: использование рекурсии

#include <iostream>
int factorial(int num) {
    if (num == 0 || num == 1)
        return 1;
    else
        return num * factorial(num - 1);
}
bool isStrongNumber(int number) {
    if (number == 0)
        return true;
    int digit = number % 10;
    int sum = factorial(digit);
    return sum + isStrongNumber(number / 10);
}
int main() {
    int number;
    std::cout << "Enter a number: ";
    std::cin >> number;
    if (isStrongNumber(number))
        std::cout << number << " is a strong number." << std::endl;
    else
        std::cout << number << " is not a strong number." << std::endl;
    return 0;
}

Метод 3: использование строк

#include <iostream>
#include <string>
int factorial(int num) {
    if (num == 0 || num == 1)
        return 1;
    else
        return num * factorial(num - 1);
}
bool isStrongNumber(int number) {
    std::string strNumber = std::to_string(number);
    int sum = 0;
    for (char digit : strNumber) {
        int num = digit - '0';
        sum += factorial(num);
    }
    return sum == number;
}
int main() {
    int number;
    std::cout << "Enter a number: ";
    std::cin >> number;
    if (isStrongNumber(number))
        std::cout << number << " is a strong number." << std::endl;
    else
        std::cout << number << " is not a strong number." << std::endl;
    return 0;
}