實現函式double power(double base, int exponent),求base的exponent次方。不得使用庫函式,同時不需要考慮大數問題。
示例 1:
輸入: 2.00000, 10
輸出: 1024.00000
示例 2:
輸入: 2.10000, 3
輸出: 9.26100
示例 3:
輸入: 2.00000, -2
輸出: 0.25000
解釋: 2-2 = 1/22 = 1/4 = 0.25
說明:-100.0 < x < 100.0
n 是 32 位有符號整數,其數值範圍是 [−231, 231 − 1] 。
解題思路:
①直接相乘法:***x……,時間複雜度為o(n),超出時間限制。
②快速冪法:
ⅰ.將指數通過「&1」運算和》等方法用二進位制表示法表示為2的i次冪的和的形式,再對x進行若干偶次冪的迴圈相乘(x² = xx,x^4 = x²*x²……),大大減少了運算次數。
ⅱ.二分遞迴
遞迴計算n/2次冪,注意:n為奇數時,x^n = x^n/2的平方再乘以x;
n為偶數時,x^n = x^n/2的平方。
//求冪直接x*x*x*x*x相乘,時間複雜度為o(n),超出時間限制
/*double mypow(double x, int n)
while((b-1) != 0)
if(flag)
return res;
}*///快速冪法(二分遞迴) 時間複雜度為o(logn).
double
mypow
(double x,
int n)
double value =
mypow
(x,b/2)
;if(n%2==0
) value = value*value;
//偶數數冪為二分冪的平方
if(n%2!=
0) value = value*value*x;
//奇數冪為二分冪的平方再乘以x
return value;
}
設計遞迴時,可以這樣想:n = 7時,不管怎麼得到的,就認為value是三次冪的值。 面試題16 數值的整數次方
實現函式double power double base,int exponent 求base的exponent次方。不得使用庫函式,同時不需要考慮大數問題。分析 由於不需要考慮大數問題,這道題看起來很簡單。但是需要特別注意的是 如果輸入的指數小於1 0和負數 的時候怎麼辦?當底數是0且指數是負數的...
面試題16 數值的整數次方
題目描述 給定乙個double型別的浮點數base和int型別的整數exponent。求base的exponent次方。注意幾種特殊的輸入情況,base為0,以及exponent正負時求指數的差異。方法一 class solution else 改進版 class solution unsigned...
面試題16 數值的整數次方
一 題目 實現函式double power double base,int exponent 求base的exponent次方。不得使用庫函式,同時不需要考慮大數問題。二 關鍵 1.考慮齊全。指數是負數。底數為零且指數是負數的時候。底數是0.2.速度提高。三 解釋 1.求整數次方時,考慮如下的數學公...