[알고리즘] 자릿수 구하기자료구조 | 알고리즘/수학2023. 12. 15. 11:42
Table of Contents
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
728x90
반응형
'자료구조 | 알고리즘 > 수학' 카테고리의 다른 글
[알고리즘] 비둘기집 원리 (0) | 2024.04.26 |
---|---|
PS를 위한 정수론 (0) | 2024.04.09 |
[알고리즘] 자릿수 분해하기 (0) | 2023.12.15 |
퓨리에 변환을 이용한 FFT를 이용한 곱셈 계산 예제문제 (0) | 2023.12.05 |
[수학] (조합론) backtracking으로 2차원 배열의 조합 탐색하기 (0) | 2023.11.28 |
@BE_개발자 :: 경이로운 개발일기
경이로운 BE 개발자가 되기 위한 프로그래밍 공부 기록장
도움이 되었다면 "❤️" 또는 "👍🏻" 해주세요! 문의는 아래 이메일로 보내주세요.