자료구조 | 알고리즘/수학

[알고리즘] 자릿수 구하기

BE_개발자 2023. 12. 15. 11:42
728x90
반응형

어떤 수의 자릿수를 구하는 알고리즘은 크게 세 가지로 생각할 수 있다.

 

1. 나머지 연산자를 이용하기

아이디어

중학교 수학시간에 자릿수에 대해서 배웠다.

자연수 k = 소수(0.xxx) x 10ⁿ으로 나타낼 때 k는 n자리 자연수라고 표현한다.

예를 들어  1234 = 0.1234 x 10⁴ 이므로 1234는 네 자리 자연수이다.

따라서 10으로 나눈 몫이 0이 될때까지 계속 나누면 나눈 횟수가 자리수가 된다.

구현

#include <iostream>

using namespace std;

int digit(int n){
    int ret = 0;
    while(n!= 0){
        n /= 10;
        ret++;
    }
    return ret;
}
int main() {
    int num;
    cin >> num;
    cout << digit(num);
    return 0;
}

 

2. 상용 로그 이용하기

아이디어

고등학교 수학 시간에 상용로그로 자릿수를 구하는 법을 배웠다. 이를 이용하여 계산만 해주면 된다.

구현

<cmath> 헤더에는 상용로그의 함수가 있다. floor함수를 이용하여 소수점 이하를 버려서 자릿수를 구하였다.

#include<iostream>
#include<cmath>

using namespace std;

int main(void){
    int n;
    cin >> n;
    int digit = floor(log10(n)) + 1;
    cout <<  digit;
    return 0;
}

 

3. string 문자열 이용하기

아이디어

숫자가 int의 범위를 초과하는 경우에는 overflow가 발생한다. 다른 방법을 생각해야 한다.

이런 경우에는 string으로 입력받고 그냥 문자열의 크기를 구해주면 된다.

구현

#include<iostream>
using namespace std;

int main(void){
    string n;
    cin >> n;
    cout << n.size();
    return 0;
}
입력: 12345678987654321
출력: 17

정리

자릿수를 구하는 알고리즘은 기본 알고리즘이다. 이를 활용하면 자릿수를 쪼개어 직접 처리할 수도 있다.

[참고] 자릿수 분해 알고리즘

https://wondrous-developer.tistory.com/115

 

[알고리즘] 자릿수 분해하기

1. 자릿수 분해란? 자연수의 자리를 하나씩 분해하는 것이다. 예를 들어 145를 자릿수 분해하면 일의 자리:1 십의자리: 4 백의 자리: 5 이렇게 분리할 수 있다. 숫자 데이터를 처리하다 보면 각각의

wondrous-developer.tistory.com

 

728x90
반응형