Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C++에서 정수의 자릿수를 구하는 방법

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 방식은 코드가 짧고 간결하다는 장점이 있습니다. 상황에 맞게 적절한 방법을 선택하여 사용하시기 바랍니다.