思路方法一:暴力法
方法二:利用指數法則遞迴計算(分奇數和偶數)
方法三: 將n表示為二進位制來做
package jzoffer;
/** * @auther: wwh
* @date: 2020-04-12 15:48
* @description:
*/public
class
mypow
double ans =1;
for(
int i =
0; i < n; i++
)return ans;}/*
** @date: 2020-04-12 16:12
* @param: * @param null:
* @return: * @return: null
* @author: wwh
* @description: 快速冪
* 最小值:integer.min_value= -2147483648 (-2的31次方)
最大值:integer.max_value= 2147483647 (2的31次方-1)
這裡需要使用long型別,因為如果傳入的n = -2147483648; 那麼轉成正數就丟失,所以要使用long
*/public
double
fastpow
(double x,
long n)
double half =
fastpow
(x,n/2)
;if(n%2==0
)else
}public
double
mypow2
(double x,
int n)
return
fastpow
(x, n);}
/** *
* @date: 2020-04-12 22:28
* @param: * @param x:
* @param n:
* @return: * @return: double
* @author: wwh
* @description: 非遞迴實現
*/public
double
mypow3
(double x,
int n)
double ans =1;
double current_product = x;
for(
long i = n; i >
0; i >>=1)
current_product = current_product * current_product;
}return ans;
}/**
* * @date: 2020-04-12 23:58
* @param: * @param null:
* @return: * @return: null
* @author: wwh
* @description:
*/public
class
solution
double res =1;
while
(n >0)
x *= x;
n /=2;
}return res;}}
public
static
void
main
(string[
] args)
}
劍指Offer 16 數值的整數次方
實現函式double power double base,int exponent 求base的exponent次方,不得使用庫函式。同時不需要考慮大數問題。看到乘方,自然想到二分加速的方法。但是這個題關注的不是速度,而是考慮問題的全面性。比如幾個邊界情況,base 0,exp 0 的時候。時間複雜...
劍指offer16 數值的整數次方
題目 實現函式double power double base,int exponent 求base的exponent次方,不得使用庫函式,同時不需要考慮大數問題。一 第一種方法大體分為以下四種情況 1 底數為0,則返回0 2 底數不為0,若指數為0,則返回1 3 底數不為0,若指數為正數,呼叫po...
劍指offer 16 數值的整數次方
保證base和exponent不同時為0 分析 注意考慮特殊情況,當底數為0,如果指數是正整數,則可以返回1,如果底數為0,指數是負整數,那麼就會出錯,而且如果底數不是0,指數是負整數,則返回的應該是底數和正整數運算結果的倒數。因此要考慮齊全。double powerwithunsignedexpo...