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

C++로 암스트롱 수(Armstrong Number) 판별하는 프로그램

암스트롱 수(Armstrong Number)란 각 자릿수를 자릿수의 개수만큼 거듭제곱한 값들을 모두 더했을 때, 그 합이 원래의 수와 같아지는 수를 말합니다. 대표적인 예시는 다음과 같습니다.

3 = 3^1
153 = 1^3 + 5^3 + 3^3 = 1 + 125 + 27 = 153
371 = 3^3 + 7^3 + 1^3 = 27 + 343 + 1 = 371
407 = 4^3 + 0^3 + 7^3 = 64 + 0 + 343 = 407

예를 들어 153은 세 자리 수이므로 각 자릿수를 세제곱하여 더하면 1 + 125 + 27 = 153이 되어 원래 수와 일치합니다. 이처럼 주어진 수가 암스트롱 수인지 아닌지를 판별하는 C++ 프로그램은 다음과 같습니다.

예제 코드

#include <iostream>
#include <cmath>
using namespace std;
int main() {
   int num = 153, digitSum, temp, remainderNum, digitNum;
   temp = num;
   digitNum = 0;
   while (temp != 0) {
      digitNum++;
      temp = temp/10;
   }
   temp = num;
   digitSum = 0;
   while (temp != 0) {
      remainderNum = temp%10;
      digitSum = digitSum + pow(remainderNum, digitNum);
      temp = temp/10;
   }
   if (num == digitSum)
   cout<<num<<" is an Armstrong number";
   else
   cout<<num<<" is not an Armstrong number";
   return 0;
}

실행 결과

153 is an Armstrong number

코드 동작 원리

위 프로그램은 여러 단계를 거쳐 주어진 수가 암스트롱 수인지 여부를 판별합니다. 먼저 첫 번째 단계에서는 입력된 수의 자릿수 개수를 구합니다. 임시 변수 temp에 원래 수를 저장한 뒤, 10으로 나누는 연산을 반복하면서 한 번 나눌 때마다 digitNum을 1씩 증가시키는 방식입니다.

temp = num;
digitNum = 0;
while (temp != 0) {
   digitNum++;
   temp = temp/10;
}

두 번째 단계에서는 자릿수 개수를 알아낸 후, 각 자릿수를 digitNum(자릿수의 개수)만큼 거듭제곱하여 digitSum에 누적합니다. temp % 10 연산으로 가장 뒤쪽 자릿수를 하나씩 추출하고, pow() 함수로 거듭제곱을 계산한 뒤 다시 10으로 나누어 다음 자릿수로 넘어갑니다.

temp = num;
digitSum = 0;
while (temp != 0) {
   remainderNum = temp%10;
   digitSum = digitSum + pow(remainderNum, digitNum);
   temp = temp/10;
}

마지막 단계에서는 원래의 수 num과 계산된 합 digitSum을 비교합니다. 두 값이 같다면 해당 수는 암스트롱 수이므로 그 사실을 출력하고, 같지 않다면 암스트롱 수가 아니라고 출력합니다.

if (num == digitSum)
cout<<num<<" is an Armstrong number";
else
cout<<num<<" is not an Armstrong number";

이 프로그램에서 변수 num에 다른 값을 대입하면 어떤 정수든 암스트롱 수 여부를 손쉽게 확인할 수 있습니다. 또한 사용자로부터 직접 입력을 받고자 한다면 cin >> num; 코드를 추가하면 됩니다.