C, C++2007. 8. 13. 17:43

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
Posted by Jay Two