스트롱 넘버(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로 바꾸면 "이 숫자는 스트롱 넘버입니다"라는 메시지를 확인할 수 있습니다.