상세 컨텐츠

본문 제목

BigInteger를 구현해보자 - 6. 크기비교

프로그래밍/Multi precision

by ∫2tdt=t²+c 2009. 4. 21. 00:54

본문

예전에 bigint가 0보다 큰지 작은지 같은지를 비교하는 bigint_sign함수를 만든적이 있다. 두 bigint의 대소를 비교하기 위해 빼고 부호를 확인해도 되지만, 그것보다 효율적인 방법으로 두 bigint의 대소를 비교하는 함수를 만들어보자.
그 전에 먼저 bigint가 몇자리 수인지 계산하는 함수를 만든다.

특별한 알고리즘 같은것은 없고, 최고자리수부터 차례대로 내려오면서 처음으로 0이 아닌 숫자가 나올때의 자릿수를 돌려준다.

이제 두 bigint가 같은지 확인하는 함수를 만든다.

먼저 두 bigint의 자릿수를 비교해서 같을 경우에는 memcmp로 비교한다. 모든 자리가 정확하게 같을 경우에 1을 돌려준다.

앞의 bigint가 뒤의 bigint보다 큰지 확인하는 함수, 크거나 같은지 확인하는 함수를 만든다.

마찬가지로 먼저 두 bigint의 자릿수를 비교해보고, 같을 경우에는 최고자리수부터 비교해 나간다.

이 네 가지 함수 모두 bigint의 len이 n이라고 했을때 시간복잡도는 최악의 경우 O(n)이 된다.
bigint_size_i 와 bigint_gt_i는 부호를 무시하고 계산한다. 부호를 고려했을 때도 별반 다를게 없으므로 생략하도록 한다.

관련글 더보기

댓글 영역