재귀 호출 없이 숫자의 각 자릿수 합을 구해야 하는 경우, '%' 연산자(나머지), '+' 연산자(덧셈), '//' 연산자(정수 나눗셈)를 함께 활용하면 손쉽게 해결할 수 있습니다.
핵심 아이디어는 간단합니다. 어떤 수를 10으로 나눈 나머지는 항상 그 수의 마지막 자릿수이고, 10으로 정수 나눗셈을 하면 마지막 자릿수가 제거된다는 점을 이용하는 것입니다. 아래 예제를 통해 자세히 살펴보겠습니다.
예제 코드
def sum_of_digits(my_num):
sum_val = 0
while (my_num != 0):
sum_val = sum_val + (my_num % 10)
my_num = my_num//10
return sum_val
my_num = 12345671
print("The number is : ")
print(my_num)
print("The method to calculate sum of digits is being called...")
print("The sum of " +str(my_num) + " is : ")
print(sum_of_digits(my_num))실행 결과
The number is : 12345671 The method to calculate sum of digits is being called... The sum of 12345671 is : 29
코드 설명
- 함수 정의: 'sum_of_digits'라는 이름의 함수를 정의하고, 계산할 숫자를 매개변수로 전달받습니다.
- 초기화: 합계를 저장할 변수 sum_val을 0으로 초기화합니다.
- 자릿수 추출: 숫자를 10으로 나눈 나머지(% 10), 즉 마지막 자릿수를 합계에 더합니다.
- 자릿수 제거: 숫자를 10으로 정수 나눗셈(// 10)한 결과를 다시 해당 숫자에 대입하여 마지막 자릿수를 제거합니다.
- 반복 처리: while 루프는 숫자가 0이 될 때까지 위 과정을 반복하므로, 모든 자릿수가 한 번씩 더해집니다.
- 결과 반환: 모든 자릿수를 더한 합계 값을 함수의 결과로 반환합니다.
- 함수 호출: 숫자 12345671을 정의하고 콘솔에 출력한 뒤, 이 숫자를 인자로 전달하며 함수를 호출합니다.
- 결과 출력: 계산된 자릿수의 합(29)이 콘솔에 출력됩니다.
이처럼 재귀를 사용하지 않고도 반복문과 기본 산술 연산자만으로 숫자 자릿수의 합을 효율적으로 구할 수 있습니다. 재귀 방식은 호출 스택을 사용하기 때문에 매우 큰 숫자에서는 스택 오버플로우 위험이 있지만, 이 반복문 방식은 그러한 제약 없이 안정적으로 동작한다는 장점이 있습니다.