面試題16 數值的整數次方

2021-10-06 01:22:11 字數 1161 閱讀 5851

實現函式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.求整數次方時,考慮如下的數學公...