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

C 언어로 주어진 숫자가 스트롱 넘버(Strong Number)인지 확인하는 방법

스트롱 넘버(Strong Number)란 각 자릿수의 팩토리얼(factorial) 값을 모두 더한 합이 원래 숫자와 같은 수를 의미합니다.

예시

  • 123 → 1! + 2! + 3!

     = 1 + 2 + 6 = 9

자릿수 팩토리얼의 합인 9가 원래 숫자 123과 일치하지 않으므로, 123은 스트롱 넘버가 아닙니다.

  • 145 → 1! + 4! + 5!

     = 1 + 24 + 120

     = 145

자릿수 팩토리얼의 합이 원래 숫자와 정확히 일치하므로, 145는 스트롱 넘버입니다.

판별 로직

주어진 숫자가 스트롱 넘버인지 확인하는 기본적인 논리는 다음과 같습니다.

  1. 숫자의 마지막 자릿수를 추출합니다 (n % 10).
  2. 추출한 자릿수의 팩토리얼을 계산합니다.
  3. 계산된 팩토리얼 값을 누적 합계(sum)에 더합니다.
  4. 숫자를 10으로 나누어(n / 10) 다음 자릿수를 처리합니다.
  5. 모든 자릿수를 처리한 후, 누적 합계와 원래 숫자(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에 누적합니다. 모든 자릿수에 대한 처리가 끝나면 sumtemp를 비교하여 두 값이 같으면 스트롱 넘버로 출력하고, 그렇지 않으면 스트롱 넘버가 아니라고 출력합니다.