C++로 프로그래밍을 하다 보면 어떤 정수가 몇 자리 숫자로 이루어져 있는지 확인해야 하는 경우가 종종 있습니다. 이번 글에서는 전통적인 반복문을 이용한 방법과, 로그 함수를 활용한 더 간결한 방법, 총 두 가지 방식을 소개합니다.
방법 1: 나눗셈을 이용한 반복문
가장 기본적인 방법은 숫자를 10으로 계속 나누면서 0이 될 때까지 나눈 횟수를 세는 것입니다. 정수를 10으로 나눌 때마다 마지막 자릿수가 하나씩 제거되므로, 나눈 횟수가 곧 자릿수가 됩니다.
예제 코드
#include <iostream>
using namespace std;
int count_digit(int number) {
int count = 0;
while(number != 0) {
number = number / 10;
count++;
}
return count;
}
int main() {
cout << "Number of digits in 1245: " << count_digit(1245) << endl;
}
실행 결과
Number of digits in 1245: 4
방법 2: log10 함수를 이용한 간결한 방법
수학적 성질을 활용하면 단 한 줄로 자릿수를 구할 수 있습니다. 상용로그(log10)를 이용하는 공식은 다음과 같습니다.
자릿수 = (int)(log10(number) + 1)
예를 들어 1245는 1000보다 크고 10000보다 작으므로, log10(1245)의 값은 3보다 크고 4보다 작습니다(3 < log10(1245) < 4). 여기서 정수 부분만 취하면 3이 되고, 여기에 1을 더하면 원하는 자릿수인 4를 얻을 수 있습니다.
예제 코드
#include <iostream>
#include <cmath>
using namespace std;
int count_digit(int number) {
return int(log10(number) + 1);
}
int main() {
cout << "Number of digits in 1245: " << count_digit(1245) << endl;
}
실행 결과
Number of digits in 1245: 4
주의 사항
log10 방식은 간결하지만 몇 가지 주의할 점이 있습니다. 첫째, 입력값이 0일 경우 log10(0)은 수학적으로 정의되지 않아 오류가 발생할 수 있습니다. 둘째, 음수에 대해서도 올바른 결과를 얻으려면 절댓값(abs)을 취해야 합니다. 따라서 다양한 입력을 안전하게 처리하려면 다음과 같이 예외 처리를 추가하는 것이 좋습니다.
int count_digit(int number) {
if (number == 0) return 1;
return int(log10(abs(number)) + 1);
}반복문 방식은 직관적이고 어떤 입력에도 안전하게 동작한다는 장점이 있고, log10 방식은 코드가 짧고 간결하다는 장점이 있습니다. 상황에 맞게 적절한 방법을 선택하여 사용하시기 바랍니다.