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

C 언어로 구현하는 암스트롱 수(Armstrong Number) 판별 프로그램

이번 글에서는 사용자로부터 입력받은 숫자 n이 암스트롱 수(Armstrong Number)인지 아닌지를 판별하는 프로그램을 C 언어로 작성해 보겠습니다.

암스트롱 수란?

암스트롱 수란 각 자릿수를 자릿수의 개수(n, 즉 자릿수의 차수)만큼 거듭제곱한 후, 그 값들을 모두 더한 합이 원래의 숫자와 같아지는 수를 말합니다.

예를 들어 1634는 네 자리 숫자이며, 각 자릿수를 4제곱하여 더하면 다음과 같습니다.

1⁴ + 6⁴ + 3⁴ + 4⁴ = 1 + 1296 + 81 + 256 = 1634

결과가 원래 숫자인 1634와 같으므로 1634는 암스트롱 수입니다.

공식

일반적인 형태의 공식은 다음과 같습니다.

wxyz…. = pow(w, n) + pow(x, n) + pow(y, n) + pow(z, n) + …..

여기서 n은 해당 숫자의 총 자릿수를 의미합니다.

알고리즘

암스트롱 수를 판별하기 위한 전체 알고리즘은 다음과 같습니다.

START
Step 1-> 거듭제곱 연산을 수행하는 함수 선언
    int power(int a, int b)
        b > 0 인 동안 반복
            power = power * a
            b를 1씩 감소
        반복 종료
        power 반환
End
Step 2-> 숫자의 자릿수(차수)를 세는 함수 선언
    int count(int n)
        i를 선언하고 0으로 초기화
        n != 0 인 동안 반복
            i를 1 증가
            n을 10으로 나눈 값을 다시 n에 저장
        반복 종료
        i 반환
End
Step 3-> 암스트롱 수 여부를 계산하는 함수 선언
    int armstrong(int n)
        x를 선언하고 count(n) 함수의 결과값을 대입
        rem = 0, m = 0 으로 초기화
        n이 참(0이 아님)인 동안 반복
            rem = n % 10
            m = m + power(rem, x)
            n = n / 10
        반복 종료
        m 반환
End
Step 4-> main 함수 선언
    int main(int argc, char const *argv[])
        n = 1634 로 초기화
        armstrong 함수를 호출하고 반환값이 n과 같은지 비교
            참이면 "암스트롱 수입니다" 출력
        End if
        Else
            "암스트롱 수가 아닙니다" 출력
End
STOP

C 언어 구현 예제

위 알고리즘을 실제 C 코드로 구현하면 다음과 같습니다.

#include <stdio.h>
int power(int a, int b){
    int power =1;
    while(b>0){
        power *= a;
        b--;
    }
    return power;
}
int count(int n){
    int i=0;
    while(n!=0){
        i++;
        n = n/10;
    }
    return i;
}
int armstrong(int n){
    int x = count(n);
    int rem = 0, m=0;
    while(n){
        rem = n %10;
        m += power(rem, x);
        n /= 10;
    }
    return m;
}
int main(int argc, char const *argv[]){
    int n = 1634;
    if(n == armstrong(n)){
        printf("%d is an armstrong number \n",n);
    }
    else
        printf("%d isn't an armstrong number \n",n);
    return 0;
}

코드 설명

  • power() 함수: 밑(a)과 지수(b)를 받아 a의 b제곱 값을 계산하여 반환합니다.
  • count() 함수: 숫자를 10으로 계속 나누면서 자릿수를 세어 반환합니다.
  • armstrong() 함수: 각 자릿수를 추출하고(count 함수로 구한 자릿수만큼 거듭제곱), 그 합계를 반환합니다.
  • main() 함수: 원래 숫자와 armstrong 함수의 반환값을 비교하여 암스트롱 수 여부를 출력합니다.

실행 결과

1634 is an armstrong number

1634는 네 자리 숫자이므로 각 자릿수를 4제곱하여 모두 더한 값이 1634로 원래 숫자와 일치하기 때문에, 프로그램은 1634가 암스트롱 수임을 정상적으로 판별합니다.