문제
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
이 숫자는 암스트롱 수가 아닙니다
코드 설명
이 프로그램은 다음과 같은 순서로 동작합니다.
- 사용자로부터 숫자를 입력받은 뒤, 원본 값을 비교를 위해
temp변수에 따로 저장합니다. while루프 안에서 나머지 연산자(%)를 이용해 마지막 자릿수를 하나씩 추출하고, 그 값을 세제곱하여total에 누적합니다.- 나눗셈 연산자(
/)로 숫자를 10으로 나누어 다음 자릿수를 준비하고, 숫자가 0이 될 때까지 반복합니다. - 루프가 끝나면 저장해 둔 원본 값(
temp)과 계산된 합(total)을 비교하여 두 값이 같으면 암스트롱 수로 판별합니다.
예를 들어 53의 경우 다음과 같이 계산되므로 암스트롱 수가 아닙니다.
53 = 5×5×5 + 3×3×3
= 125 + 27
= 152 ≠ 53