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;
}
}