gnu c 에는 log2() 라는 함수가 있어서 이를 쉽게 해결할 수 있습니다.
하지만 windows 표준 수학 함수에는 없습니다. (닷넷용으로 일부 있기는 한데...)
그래서, log() 함수를 아래와 같이 엮어서 사용해야 합니다.
즉, log 2(8) 은 log(8) 값을 log(2) 로 나눈것이므로, 함수를 두번 호출해야 합니다.
// 예제 - 2 의 n 배승인 수인지의 검사
#include <math.h>
#include <limits.h>
#include <windows.h>
#include <stdio.h>
int main()
{
int i = 0;
int j = 0;
double t = 0;
int q = 0;
int r = 0;
double y = 0;
int p = 0;
for ( i = 2 ; i < INT_MAX ; i++ )
{
t = log((double)i) / log((double)2);
q = (int)( log((double)i) / log((double)2) );
r = (int) ceil( t );
p = (int) pow( 2, r );
if ( i == p )
{
printf( "%d", i ); // it's a 2 power number!!
}
}
return 0;
}
반응형
'C, C++' 카테고리의 다른 글
32비트 윈도우즈에서의 자료형 (2) | 2007.09.04 |
---|---|
API함수 IsWindowUnicode (0) | 2007.08.28 |
basic_string replace 함수 (0) | 2007.08.13 |
VCL Example Main Source - Project1.cpp (0) | 2007.08.03 |
vc6redist (0) | 2007.07.31 |