1.) The program asks the user for a number N
2.) The program is supposed to displays all numbers in range 0-N that are "super numbers".
Super number: is a number such that the sum of the factorials of its digits equals the number.
examples of super numbers.
12 != 1! + 2! = 1 + 2 = 3 (it's not super) 145 = 1! + 4! + 5! = 1 + 24 + 120 (is super)
3.) The part I seem to be stuck at is when the program displays all numbers in range 0-N that are "super numbers". I have concluded I need a loop in order to solve this but I do not know how to go about it So, for example, the program is supposed to read all the numbers from 0-50 and whenever the number is super it displays it. so it only displays 1 and 2 since they are considered super
enter integer: 50 2 is super 1 is super
4.) I have written two functions the first is a regular factorial program and the Second is a program that sums the factorials of the digits my code
number = int(input ("enter integer: ")) def factorial (n): result = 1 i =n *(n-1) while n >= 1: result = result * n n = n-1 return result #print(factorial(number)) def breakdown (n): breakdown_num = 0 remainder = 0 if n < 10: breakdown_num += factorial(n) return breakdown_num else: while n > 10: digit = n % 10 remainder = n // 10 breakdown_num += factorial(digit) #print (str(digit)) #print(str(breakdown_num)) n = remainder if n < 10 : #print (str(remainder)) breakdown_num += factorial(remainder) #print (str(breakdown_num)) return breakdown_num #print(breakdown(number)) if (breakdown(number)) == number: print(str(number)+ " is super")
First I would slightly change how main code is executed, by moving main parts to
if __name__ == '__main__', which will execute after running this
.py as main file:
if __name__ == '__main__': number = int(input ("enter integer: ")) if (breakdown(number)) == number: print(str(number)+ " is super")
After that it seems much clearer what you should do to loop over numbers, so instead of above it would be:
if __name__ == '__main__': number = int(input ("enter integer: ")) for i in range(number+1): if (breakdown(i)) == i: print(str(i)+ " is super")
Example input and output:
enter integer: 500 1 is super 2 is super 145 is super
Small advice - you don't need to call
int will be shown the same way anyway
Hope that helps