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

파이썬으로 암스트롱 수(Armstrong Number) 판별하기

이 글에서는 주어진 정수가 암스트롱 수인지 판별하는 파이썬 프로그램의 풀이 과정과 접근 방식을 단계별로 살펴봅니다.

문제 정의

정수 n이 주어졌을 때, 이 정수가 암스트롱 수인지 확인해야 합니다.

양의 정수가 n자리(n차) 암스트롱 수가 되려면, 각 자릿수를 n제곱한 값들을 모두 더한 합이 원래 수와 같아야 합니다.

abcd... = a^n + b^n + c^n + d^n + …

예를 들어 153은 대표적인 세 자리 암스트롱 수입니다. 1³ + 5³ + 3³ = 1 + 125 + 27 = 153이 성립하기 때문입니다.

접근 방식

여기서는 세 자리 수(3차)를 대상으로 하는 브루트 포스 방식의 풀이를 다룹니다. 임의의 n차 암스트롱 수를 확인하려면 코드 7번째 줄의 지수 3을 해당 차수 값으로 바꿔주면 됩니다.

전체적인 알고리즘은 다음과 같습니다.

  1. 원래 숫자를 temp 변수에 복사합니다.
  2. while 루프 안에서 나머지 연산(% 10)으로 마지막 자릿수를 하나씩 추출합니다.
  3. 추출한 자릿수를 세제곱하여 누적합 변수 sum_에 더합니다.
  4. 정수 나눗셈(//= 10)으로 마지막 자릿수를 제거하고 루프를 반복합니다.
  5. 루프가 끝난 후 원래 수 numsum_을 비교하여 두 값이 같으면 암스트롱 수로 판별합니다.

구현 예시

num = 221
sum_ = 0
#
temp = num
while temp > 0:
    digit = temp % 10
    sum_ += digit ** 3
    temp //= 10
#
if num == sum_:
    print(num,"은(는) 암스트롱 수입니다")
else:
    print(num,"은(는) 암스트롱 수가 아닙니다")

실행 결과

221 은(는) 암스트롱 수가 아닙니다

221의 경우 각 자릿수의 세제곱 합이 2³ + 2³ + 1³ = 8 + 8 + 1 = 17이므로 원래 수인 221과 일치하지 않습니다. 따라서 암스트롱 수가 아니라는 결과가 출력됩니다.

참고로 위 코드의 모든 변수(num, sum_, temp, digit)는 전역 범위(global scope)에서 선언되어 프로그램 전체에서 접근할 수 있습니다.

결론

이 글에서는 자릿수 추출과 거듭제곱 합 계산을 통해 주어진 정수가 암스트롱 수인지 판별하는 방법을 알아보았습니다. 지수 값만 변경하면 세 자리뿐만 아니라 임의의 자릿수에 대한 암스트롱 수도 손쉽게 확인할 수 있습니다.