How to find all the numbers that are equal to the sum of the factorials of their digits in Swift

1 Answer

0 votes
import Foundation

// Example: 145 = 1! + 4! + 5! = 1 + 24 + 120 = 145

// Function to compute the factorial of a number
func factorial(_ n: Int) -> Int {
    var fact = 1
    
    if n >= 2 {
        for i in 2...n {
            fact *= i
        }
    }
    
    return fact
}

// Function to find all numbers equal to the sum of the factorials of their digits
func findDigitFactorialNumbers() {
    // Precompute factorials of digits 0–9
    let factorials = (0...9).map { factorial($0) }

    // Define an upper limit (7 * 9! is a safe limit for this problem)
    let upperLimit = 7 * factorials[9]

    // Iterate through all numbers and check the condition
    for num in 10...upperLimit {
        var sum = 0
        var temp = num

        // Calculate the sum of factorials of digits
        while temp > 0 {
            let digit = temp % 10
            sum += factorials[digit]
            temp /= 10
        }

        // Check if the number equals the sum of the factorials of its digits
        if sum == num {
            print("\(num) is a digit factorial number.")
        }
    }
}

findDigitFactorialNumbers()



/*
run:

145 is a digit factorial number.
40585 is a digit factorial number.

*/

 



answered Nov 10, 2025 by avibootz
...