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

C 언어로 숫자가 암스트롱 수인지 판별하는 방법

문제

C 프로그래밍 언어를 사용하여 주어진 숫자가 암스트롱 수(Armstrong Number)인지 아닌지 어떻게 확인할 수 있을까요?

해결 방법

암스트롱 수란 각 자릿수의 세제곱을 모두 더한 합이 원래 숫자와 같은 수를 의미합니다.

공식

pqrs…… = pow(p,n) + pow(q,n) + pow(r,n) + ……

예를 들어 153, 371, 1634 등이 대표적인 암스트롱 수입니다.

153 = 1×1×1 + 5×5×5 + 3×3×3
    = 1 + 125 + 27
    = 153 (암스트롱 수)

참고로 자릿수가 4개인 경우에는 각 자릿수를 네제곱하여 더합니다. 예를 들어 1634 = 1⁴ + 6⁴ + 3⁴ + 4⁴ = 1 + 1296 + 81 + 256 = 1634로, 역시 암스트롱 수에 해당합니다.

프로그램 코드

#include<stdio.h>
int main(){
    int number, remainder, total = 0, temp;
    printf("숫자를 입력하세요=");
    scanf("%d", &number);
    temp = number;
    while(number > 0){
        remainder = number % 10;
        total = total + (remainder * remainder * remainder);
        number = number / 10;
    }
    if(temp == total)
        printf("이 숫자는 암스트롱 수입니다");
    else
        printf("이 숫자는 암스트롱 수가 아닙니다");
    return 0;
}

실행 결과

숫자를 입력하세요=371
이 숫자는 암스트롱 수입니다
검증: 371 = 3×3×3 + 7×7×7 + 1×1×1
          = 27 + 343 + 1
          = 371

숫자를 입력하세요=53
이 숫자는 암스트롱 수가 아닙니다

코드 설명

이 프로그램은 다음과 같은 순서로 동작합니다.

  1. 사용자로부터 숫자를 입력받은 뒤, 원본 값을 비교를 위해 temp 변수에 따로 저장합니다.
  2. while 루프 안에서 나머지 연산자(%)를 이용해 마지막 자릿수를 하나씩 추출하고, 그 값을 세제곱하여 total에 누적합니다.
  3. 나눗셈 연산자(/)로 숫자를 10으로 나누어 다음 자릿수를 준비하고, 숫자가 0이 될 때까지 반복합니다.
  4. 루프가 끝나면 저장해 둔 원본 값(temp)과 계산된 합(total)을 비교하여 두 값이 같으면 암스트롱 수로 판별합니다.

예를 들어 53의 경우 다음과 같이 계산되므로 암스트롱 수가 아닙니다.

53 = 5×5×5 + 3×3×3
  = 125 + 27
  = 152 ≠ 53