Programming Language/C++

[C++] 자릿수에 따라 다르게 처리하기

Dev_en 2021. 11. 26. 00:44

프로그램을 구현하다보면 주어지는 값의 자릿수에 따라서 다르게 처리를 해야하는 경우가 많다.

이를 처리할 수 있는 방법은 여러 가지가 있을 텐데, 찾는 대로 정리해보도록 하겠다.

 

1. 조건문으로 자릿수 나누기

주어진 값의 크기가 작다면, 단순하게 조건문으로 10, 100, 1000, .... 등 자릿수 별로 케이스를 나누어 구현한다.

예제) 백준 1065번 - 한수

#include <iostream>
using namespace std;

int func(int n){
    int cnt=0;
    for(int i=1; i<=n; i++){
        if(i < 10){
            cnt++;
        }
        else if(i<100){
            cnt++;
        }
        else if(i<1000){
            if((i/100 - i%100/10) == (i%100/10 - i%10)) cnt++;
        }
        else{ // i==1000
            
        }
    }
    
    return cnt;
}

int main(){
    int n;
    cin >> n;
    
    cout << func(n);
}

위 프로그램은 입력값 이하의 한수(각 자리가 등차수열을 이루는 수)의 개수를 구하는 프로그램이다.

 

이 문제는 입력값의 최댓값이 1000이기 때문에

100 미만의 수는 비교할 공차가 없거나 1개만 있어 단순히 카운팅만 해주었고,

100 이상 1000 이하의 수가 들어오면 (100의 자릿수 - 10의 자릿수)와 (10의 자릿수 - 1의 자릿수)가 같은 경우, 즉 각 자리가 등차수열을 이루는 경우에만 카운팅을 해주었다.

 

2. 반복문으로 자릿수 나누기

주어진 수의 1의 자릿수를 출력하고, 진분수가 되기 전까지 10으로 계속 나누면서

'1의 자릿수 출력 -> 10으로 나누기'를 반복하는 방법이다.

#include <iostream>
using namespace std;

int main(){
    int a  = 1234;
    
    while( a >= 1 ){
        cout << a%10 << "\n";
        a /= 10;
    }
}