Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

파이썬으로 강한 수(Strong Number) 판별 프로그램 작성하기

강한 수(Strong Number)란 무엇일까요?

강한 수(Strong Number)란 각 자릿수의 팩토리얼 값을 모두 더했을 때, 그 합이 원래의 숫자와 같아지는 수를 의미합니다.

예시

145
1의 팩토리얼 = 1
4의 팩토리얼 = 24
5의 팩토리얼 = 120
합계 = 1 + 24 + 120
     = 145

위 예시에서 볼 수 있듯이, 145는 각 자릿수의 팩토리얼 합이 자기 자신과 같기 때문에 강한 수입니다. 이제 입력받은 숫자가 강한 수인지 판별하는 파이썬 프로그램을 살펴보겠습니다. 숫자가 강한 수라면 True를 반환하고, 그렇지 않다면 False를 반환합니다.

프로그램의 동작 원리

  • 이 프로그램은 두 개의 함수로 구성됩니다. 첫 번째는 숫자가 강한 수인지 판단하는 isStrong() 함수이고, 두 번째는 전달받은 자릿수의 팩토리얼을 계산해 반환하는 factorial() 함수입니다.

  • isStrong() 함수 내부에서 factorial() 함수를 호출하여 각 자릿수(n % 10)의 팩토리얼을 구하고, 그 값을 합계에 계속 더해 나갑니다.

  • 모든 자릿수의 팩토리얼 합계가 완성되면, 이 합계를 원래 숫자와 비교합니다. 두 값이 같으면 True를, 다르면 False를 반환합니다.

  • isStrong() 함수에서 n의 값을 num에 복사할까요? while 반복문을 실행하면서 n의 값은 점차 줄어들어 결국 0이 되기 때문입니다. 하지만 나중에 합계와 비교하려면 원래 값이 필요하므로, 반복문으로 값이 변경되기 전에 미리 다른 변수에 복사해 두어야 합니다.

  • factorial() 함수는 재귀 호출(recursion) 방식을 사용하여 자릿수의 팩토리얼을 계산합니다.

전체 코드

def factorial(d):
    if(d==1 or d==0):
        return 1
    return d*factorial(d-1)

def isStrong(n):
    num=n
    sm=0
    while(n>0):
        digit=n%10
        sm=sm+factorial(digit)
        n=n//10
    if(sm==num):
        return True
    else:
        return False

print("Input a number")
a=int(input())
print(isStrong(a))

실행 결과

Input a number
145
True

숫자 145를 입력하면 각 자릿수 팩토리얼의 합이 145와 일치하므로 True가 출력되는 것을 확인할 수 있습니다.