스트롱 넘버(Strong Number)란 각 자릿수의 팩토리얼(factorial) 값을 모두 더한 합이 원래 숫자와 같은 수를 의미합니다.
예시
- 123 → 1! + 2! + 3!
= 1 + 2 + 6 = 9
자릿수 팩토리얼의 합인 9가 원래 숫자 123과 일치하지 않으므로, 123은 스트롱 넘버가 아닙니다.
- 145 → 1! + 4! + 5!
= 1 + 24 + 120
= 145
자릿수 팩토리얼의 합이 원래 숫자와 정확히 일치하므로, 145는 스트롱 넘버입니다.
판별 로직
주어진 숫자가 스트롱 넘버인지 확인하는 기본적인 논리는 다음과 같습니다.
- 숫자의 마지막 자릿수를 추출합니다 (
n % 10). - 추출한 자릿수의 팩토리얼을 계산합니다.
- 계산된 팩토리얼 값을 누적 합계(
sum)에 더합니다. - 숫자를 10으로 나누어(
n / 10) 다음 자릿수를 처리합니다. - 모든 자릿수를 처리한 후, 누적 합계와 원래 숫자(
temp)를 비교합니다.
while(n){
i = 1, fact = 1;
rem = n % 10;
while(i <= rem){
fact = fact * i;
i++;
}
sum = sum + fact;
n = n / 10;
}
if(sum == temp)
printf("%d is a strong number\n", temp);
else
printf("%d is not a strong number\n", temp);C 프로그램 전체 코드
다음은 주어진 숫자가 스트롱 넘버인지 판별하는 완전한 C 프로그램입니다.
#include<stdio.h>
int main(){
int n, i;
int fact, rem;
printf("\nEnter a number : ");
scanf("%d", &n);
printf("\n");
int sum = 0;
int temp = n;
while(n){
i = 1, fact = 1;
rem = n % 10;
while(i <= rem){
fact = fact * i;
i++;
}
sum = sum + fact;
n = n / 10;
}
if(sum == temp)
printf("%d is a strong number\n", temp);
else
printf("%d is not a strong number\n", temp);
return 0;
}실행 결과
위 프로그램을 실행하면 다음과 같은 결과를 얻을 수 있습니다.
Run 1: Enter a number : 145 145 is a strong number Run 2: Enter a number : 25 25 is not a strong number
코드 동작 원리 요약
프로그램은 먼저 사용자로부터 숫자를 입력받고, 원본 값을 비교를 위해 temp 변수에 저장합니다. 이후 반복문을 통해 각 자릿수를 하나씩 추출하고 내부 반복문으로 해당 자릿수의 팩토리얼을 계산하여 sum에 누적합니다. 모든 자릿수에 대한 처리가 끝나면 sum과 temp를 비교하여 두 값이 같으면 스트롱 넘버로 출력하고, 그렇지 않으면 스트롱 넘버가 아니라고 출력합니다.