冪函數實現

題目描述:

冪函數的實現

算法分析:

//非負整數計算冪函數2^n
//O(n) = O(2^r),r爲輸入指數n二進制位數,即比特位數
__int64 power1(int n)
{
	__int64 rnt = 1;//O(1)

	for (int i = 0; i  < n; i++ )//O(n)
	{

		rnt <<= 1; //rnt *= 2;倍增,//O(1)
		
	}

	return rnt;//O(1)
}

通用的一個算法,可以計算a^n

//a^n算法:n >= 0
__int64 powerBF( __int64 a, int n )
{ 
   __int64 rnt = 1; 
   while ( 0 < n ) { //O(n)
      rnt *= a; 
      n--;
   }
   return rnt; 
}

算法優化:

/******************************************************************************************
* Data Structures in C++
* Auther : luxiang
* github:https://github.com/Lxxing?tab=repositories
* 歡迎交流指正
******************************************************************************************/

//優化迭代版
__int64 power1OP ( int n )
{ 
   __int64 rnt = 1;
   __int64 p = 2; 
   while ( 0 < n ) 
   { 
      if ( n & 1 ) //如果是奇數
         rnt *= p; 
      n >>= 1; //
      p *= p;
   }
   return rnt;
} //O(logn) = O(r),r爲輸入指數n的比特位數

通用版本

/******************************************************************************************
* Data Structures in C++
* Auther : luxiang
* github:https://github.com/Lxxing?tab=repositories
* 歡迎交流指正
******************************************************************************************/

//優化
__int64 power( __int64 a, int n ) 
{ 
   __int64 rnt = 1; 
   __int64 p = a; 
   while ( 0 < n )//O(logn)
   { 
      if ( n & 1 ) 
         rnt *= p; 
      n >>= 1;
      p *= p; 
   }
   return rnt;
} 

判斷一個數是不是二的倍數,即判斷該數二進制末位是不是0:

a % 2 == 0 或者a & 0x0001 == 0。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章