주어진 숫자가 Harshad 수(하샤드 수)인지 판별해야 할 때는 간단한 반복문과 '%' 연산자, '+' 연산자, '//' 연산자만 활용하면 됩니다.
Harshad 수는 Niven 수라고도 불리며, 어떤 정수를 특정 진법으로 표현했을 때 그 수의 각 자릿수 합으로 나누어 떨어지는 수를 의미합니다. 예를 들어 10진수에서 18은 자릿수의 합이 1+8=9이고, 18÷9=2로 나누어 떨어지므로 Harshad 수입니다. 참고로 1부터 10까지의 모든 자연수와 12, 21 등도 Harshad 수에 해당합니다.
아래는 이를 구현한 예제입니다.
예제 코드
my_num = 134
remaining = sum_val = 0
print("확인할 숫자의 복사본을 생성합니다...")
my_num_copy = my_num;
while(my_num > 0):
remaining = my_num%10;
sum_val = sum_val + remaining;
my_num = my_num//10;
if(my_num_copy % sum_val == 0):
print(str(my_num_copy) + "은(는) Harshad 수입니다");
else:
print(str(my_num_copy) + "은(는) Harshad 수가 아닙니다");실행 결과
확인할 숫자의 복사본을 생성합니다... 134은(는) Harshad 수가 아닙니다
코드 설명
- 먼저 확인할 숫자를 변수에 정의합니다.
- 각 자릿수의 합을 저장할 sum 변수를 0으로 초기화합니다.
- 숫자가 0보다 큰 동안 반복하면서 나머지 연산(%)을 통해 일의 자릿수를 하나씩 추출합니다.
- 추출한 자릿수를 합계에 더하고, 숫자를 10으로 나눈 몫(//)으로 갱신하여 다음 자릿수로 넘어갑니다.
- 반복이 끝나면 원래 숫자를 자릿수의 합으로 나누었을 때 나머지가 0이면 Harshad 수로 판별합니다.
- 나머지가 0이 아니라면 Harshad 수가 아닌 것으로 처리됩니다.