이 글에서는 주어진 숫자의 각 자릿수를 반복해서 더하여, 그 결과가 한 자리 숫자가 될 때까지 계산하는 C++ 프로그램을 다룹니다. 이렇게 얻어진 최종 한 자리 숫자는 수학에서 '디지털 루트(digital root)'라고도 불립니다.
문제 이해하기
예를 들어 숫자 14520을 살펴보겠습니다. 먼저 각 자릿수를 더하면 다음과 같습니다.
1 + 4 + 5 + 2 + 0 = 12
12는 아직 두 자리 숫자이므로, 한 번 더 자릿수를 더해야 합니다.
1 + 2 = 3
3은 한 자리 숫자이므로 더 이상 자릿수를 더할 수 없으며, 이것이 최종 답이 됩니다.
효율적인 접근 방법
자릿수를 매번 직접 더하는 대신, 수학적 성질을 활용하면 훨씬 빠르게 문제를 해결할 수 있습니다.
- 9로 나누어 떨어지는 수의 자릿수 합(디지털 루트)은 항상 9입니다.
- 9로 나누어 떨어지지 않는 수는 9로 나눈 나머지가 곧 최종 자릿수 합이 됩니다.
예를 들어 14520을 9로 나누면 나머지가 3이 되는데, 이는 앞서 자릿수를 반복해 더한 결과인 3과 정확히 일치합니다. 단, 입력값이 0일 경우에는 결과도 0이므로 별도로 처리해 주어야 합니다.
C++ 구현 예제
#include<bits/stdc++.h>
using namespace std;
// 9의 배수 여부를 확인하여 디지털 루트를 반환하는 함수
int sum_digits(int n) {
if (n == 0)
return 0;
else if (n%9 == 0)
return 9;
else
return (n%9);
}
int main() {
int x = 14520;
cout<<sum_digits(x)<<endl;
return 0;
}
실행 결과
3
마무리
이 방법의 가장 큰 장점은 반복문 없이 단 한 번의 모듈로 연산만으로 결과를 얻을 수 있다는 점입니다. 따라서 아무리 큰 숫자가 입력되더라도 일정한 시간 안에 답을 계산할 수 있어 매우 효율적입니다.