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

C 언어로 스트롱 넘버(Strong Number) 판별하는 프로그램

숫자 'n'이 주어졌을 때, 이 숫자가 스트롱 넘버(Strong Number)인지 아닌지 판별해야 합니다.

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

따라서 어떤 수가 스트롱 넘버인지 확인하려면 그 수의 모든 자릿수를 하나씩 추출해야 합니다. 예를 들어 숫자가 145라면 1, 4, 5를 각각 뽑아낸 후, 각 숫자의 팩토리얼을 구합니다. 즉, 1! = 1, 4! = 24, 5! = 120입니다.

이제 1 + 24 + 120을 더하면 145가 되는데, 이는 입력값과 정확히 일치합니다. 따라서 145는 스트롱 넘버라고 할 수 있습니다.

예시

입력: n = 124
출력: 아니요, 스트롱 넘버가 아닙니다
설명: 1! + 2! + 4! = 27로 n(124)과 같지 않습니다
입력: n = 145
출력: 네, 스트롱 넘버입니다
설명: 1! + 4! + 5! = 145

문제 해결 접근 방식

이 문제는 다음과 같은 방법으로 해결할 수 있습니다.

  • 일의 자리부터 시작하여 각 자릿수를 하나씩 가져오고, 해당 자릿수의 팩토리얼을 구합니다.
  • 구한 각 자릿수의 팩토리얼 값을 모두 더합니다.
  • 결과값을 원래 숫자와 비교합니다. 두 값이 같으면 스트롱 넘버이고, 그렇지 않으면 스트롱 넘버가 아닙니다.

알고리즘

START
함수 int factorial(int r)
    Step1 -> int fact를 선언하고 1로 초기화
    Step2 -> r > 1인 동안 반복
        fact를 fact * r로 설정
        r을 1씩 감소
    End Loop
    Step3 -> fact 반환
    factorial 함수 종료
함수 int check(int n)
    Step1 -> int temp, rem, result를 선언하고 result를 0으로 초기화
    Step2 -> temp를 n으로 설정
    Step3 -> temp가 참인 동안 반복
        rem을 temp % 10으로 설정
        result를 result + factorial(rem)으로 설정
        temp를 temp / 10으로 설정
    End loop
    Step4 -> 만약 result == n이라면,
        1 반환
    Step5 -> 아니면
        0 반환
    check 함수 종료
main(int argc, char const *argv[])
    Step1 -> n을 선언하고 145로 초기화
    Step2 -> 만약 check(n)이 참이라면,
        "Yes it is a strong number" 출력
    Step3 -> 아니면
        "no it is not a strong number" 출력
STOP

예제 코드

#include <stdio.h>
int factorial(int r) {
   int fact = 1;
   while(r>1) {
      fact = fact * r;
      r--;
   }
   return fact;
}
int check(int n) {
   int temp, rem, result = 0;
   temp = n;
   while(temp) {
      rem = temp % 10;
      result = result + factorial(rem);
      temp = temp/10;
   }
   if (result == n)
      return 1;
   else
      return 0;
}
int main(int argc, char const *argv[]) {
   int n = 145;
   if (check(n))
      printf("Yes it is a strong number\n");
   else
      printf("no it is not a strong number\n");
   return 0;
}

위 코드를 실행하면 다음과 같은 결과가 출력됩니다.

Yes it is a strong number