일전에 내가 어떤 수의 자릿수를 구하기 위해 무지 고민하다가
sprintf 및 strlen 을 이용하는 방법과 수없이 많은 if elseif 를 사용하는 방법..
그밖에 더 나은 방법은 없을까 한참을 고민했던 일이 있다.
gameinside.org라는 개인홈피에 우연히 들렀다가 그 해답을 얻게 되었다.
이 사람도 어딘가에서 긁어왔지만.. 보자!
어떤 숫자의 자릿 수 구하기.
이것은 수학의 로그(log)를 이용하면 됩니다..
물론, 로그를 이용하면, 그 숫자가 8진수건, 16진수건 상관없이 자릿 수를 구할 수 있습니다.
로그에는 지표와 가수라는 것이 있는 데, 이 지표에 1을 더한 값이 그 자릿 수가 됩니다.
즉, floor(log10(x)) + 1이 자릿 수가 됩니다.
10진수에서 x의 자릿수 = floor( log10( x ) ) + 1이 됩니다.
만약, D진수라면,
D진수에서 x의 자릿수 = floor( log10( x ) / log10( D ) ) + 1이 되죠.
즉, 로그에서는 log10함수가 밑이 10일 때를 의미하므로 로그의 성질에 의해서
logD( x ) = log10( x ) / log10( D )가 되는 것입니다.