주어진 숫자가 디사리움(Disarium) 수인지 확인하려면, 각 자릿수를 해당 자리의 위치만큼 거듭제곱한 값들의 합을 계산해야 합니다. 이를 위해서는 먼저 숫자가 몇 자릿수인지 구하는 과정이 필요합니다.
디사리움 수란 각 자릿수를 그 자리 위치만큼 거듭제곱한 값의 합이 원래 숫자 자신과 같은 수를 의미합니다. 예를 들어 135는 11 + 32 + 53 = 1 + 9 + 125 = 135이므로 디사리움 수에 해당합니다.
아래는 이를 확인하는 파이썬 코드 예시입니다.
예제 코드
def length_calculation(num_val):
length = 0
while(num_val != 0):
length = length + 1
num_val = num_val//10
return length
my_num = 192
remaining = sum_val = 0
len_val = length_calculation(my_num)
print("A copy of the original number is being made...")
num_val = my_num
while(my_num > 0):
remaining = my_num%10
sum_val = sum_val + int(remaining**len_val)
my_num = my_num//10
len_val = len_val - 1
if(sum_val == num_val):
print(str(num_val) + " is a disarium number !")
else:
print(str(num_val) + " isn't a disarium number")
실행 결과
A copy of the original number is being made... 192 isn't a disarium number
코드 설명
length_calculation이라는 이름의 함수를 정의하여 숫자의 자릿수 개수를 계산합니다.- 이 함수는 숫자를 10으로 나눈 몫(정수 나눗셈)을 반복적으로 구하면서 자릿수를 세고, 최종 자릿수를 반환합니다.
- 확인할 숫자 192를 정의하고, 원래 숫자의 복사본을 미리 만들어 둡니다.
- 나머지 연산자(%)를 사용해 가장 뒤쪽 자릿수를 하나씩 추출하고, 그 자릿수를 현재 위치 지수로 거듭제곱한 값을 합계 변수에 더합니다.
- 자릿수를 하나 처리할 때마다 지수(len_val)를 1씩 감소시켜 왼쪽 자리로 이동합니다.
- 모든 자릿수를 처리한 후, 계산된 합계가 원래 숫자와 같은지 비교합니다.
- 두 값이 같으면 디사리움 수이고, 그렇지 않으면 디사리움 수가 아닙니다.
참고로 1부터 9까지의 한 자리 숫자는 모두 디사리움 수이며, 89, 135, 175, 518, 598 등도 대표적인 디사리움 수입니다. 반면 192는 11 + 92 + 23 = 90으로 원래 숫자와 다르기 때문에 디사리움 수가 아닙니다.