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

파이썬으로 스트롱 넘버(강한 수) 판별하기 – 자릿수 팩토리얼 합으로 확인하는 방법

스트롱 넘버(Strong Number, 강한 수)란 각 자릿수의 팩토리얼 값을 모두 더했을 때 그 합이 원래의 수 'n'과 같아지는 수를 말합니다. 팩토리얼은 어떤 수부터 1까지의 모든 정수를 곱한 값을 의미하며, 느낌표(!) 기호로 표현합니다. 예를 들어 5! = 5 × 4 × 3 × 2 × 1 = 120입니다.

특정 숫자가 스트롱 넘버인지 확인하려면 나머지 연산자(%)와 while 반복문을 활용하면 됩니다. 숫자를 한 자릿수씩 분리하고, 각 자릿수의 팩토리얼을 구해 누적한 뒤 원래 값과 비교하는 방식입니다.

대표적인 스트롱 넘버의 예는 145입니다. 1! + 4! + 5! = 1 + 24 + 120 = 145가 되기 때문입니다.

예제 코드

my_sum = 0
my_num = 296
print("확인할 숫자:")
print(my_num)
temp = my_num
while(my_num):
    i = 1
    fact = 1
    remainder = my_num % 10
    while(i <= remainder):
        fact = fact * i
        i = i + 1
    my_sum = my_sum + fact
    my_num = my_num // 10
if(my_sum == temp):
    print("이 숫자는 스트롱 넘버입니다")
else:
    print("이 숫자는 스트롱 넘버가 아닙니다")

실행 결과

확인할 숫자:
296
이 숫자는 스트롱 넘버가 아닙니다

코드 동작 원리

  • 누적합을 저장할 변수 my_sum을 0으로 초기화합니다.

  • 검사할 숫자를 정의하고 콘솔에 출력합니다.

  • 원래 값을 비교하기 위해 임시 변수 temp에 저장해 둡니다.

  • while 반복문 안에서 나머지 연산자(%)를 사용해 마지막 자릿수를 하나씩 추출합니다.

  • 내부 while 반복문으로 추출된 자릿수까지의 팩토리얼을 계산합니다.

  • 반복자가 자릿수보다 작거나 같은 동안 fact 변수에 반복자를 곱합니다.

  • 반복자는 매번 1씩 증가시킵니다.

  • 계산된 팩토리얼 값을 my_sum에 더하고, 정수 나눗셈(//)으로 다음 자릿수로 이동합니다.

  • 모든 자릿수를 처리한 후, temp(원래 값)와 누적합이 같다면 스트롱 넘버로 판별합니다.

위 예제에서 296의 경우 6! + 9! + 2!의 합이 296과 일치하지 않으므로 스트롱 넘버가 아니라는 결과가 출력됩니다. 만약 입력값을 145로 바꾸면 "이 숫자는 스트롱 넘버입니다"라는 메시지를 확인할 수 있습니다.