劍指offer-12:數值的整數次方
阿新 • • 發佈:2018-12-05
題目描述
給定一個double型別的浮點數base和int型別的整數exponent。求base的exponent次方。
思路
個人覺得此題考查的是快速冪演算法。
快速冪演算法
快速冪 , 矩陣快速冪 在算大指數次方時是很高效的,他的基本原理是二進位制。
大家首先要認識到這一點:任何一個整數N,都能用二進位制來表示。。
那麼對於an , n一定可以用二進位制表示,比如a11
double fun( double a, int b )
{
double r = 1;
double base = a;
while ( b != 0 )
{
if((b&1)==1)//判斷奇偶性,為1時才進行運算
{
r *= base;
}
base *= base;
b=b>>1;
}
return r;
}
此題程式碼
public class Solution12 {
public double Power(double base, int exponent) {
double res = 1, curr = base;
int n;
if (exponent > 0) {
n = exponent;
} else if (exponent < 0) {
if (base == 0)
throw new RuntimeException("分母不能為0");
n = -exponent;
} else {// exponent==0
return 1;// 0的0次方
}
while (n != 0) {//快速冪演算法
if ((n & 1) == 1){
res *= curr;
}
curr *= curr;// 翻倍
n >>= 1;// 右移一位
}
return exponent >= 0 ? res : (1 / res);
}
public static void main(String[] args) {
Solution12 solu = new Solution12();
System.out.println(String.valueOf(solu.fun(3, 4)));
}
}