面試題 9 數值的整數次方

2021-08-15 17:01:01 字數 1399 閱讀 7350

這道面試題看似簡單,但很容易忽略一些細節問題。當指數為負數時,我們可以先對指數求絕對值,然後算出次方再求倒數。既然要求倒數了,我們很自然想到有沒有可能對 0 倒數,對 0 求倒數怎麼辦?

根據上面的猜想,我們可以寫出如下的**:

#include 

using

namespace

std;

bool invalidinput = false;

bool myequal(double num1, double num2)

double mypower(double base, int exponent)

unsigned

int ab***ponent = (exponent > 0) ? exponent : -exponent;

double result = 1.0;

for (unsigned

int i = 1; i <= ab***ponent; i++)

result *= base;

if (exponent < 0)

result = 1.0 / result;

return result;

}int main()

我們現在考慮這樣乙個問題,是否可以對效率進行提公升?

比如說:我要求 2 的 32 次方,那麼根據上面的**,迴圈體會迴圈 31 次,如果我第一次求的 2 的 2 次方,第二次求得 2 的 4 次方,第三次求得 2 的 8 次方。。。

通過這樣的設想,我們僅僅需要計算 5 次就可以得到這樣的 2 的 32 次方了,是不是效率提高了很多呢。

基於這種想法,我們可以寫出下面的**:

#include 

using

namespace

std;

bool invalidinput = false;

bool myequal(double num1, double num2)

double powerwithunsignedexponent(double base, unsigned

int exponent)

double mypower(double base, int exponent)

unsigned

int ab***ponent = (exponent > 0) ? exponent : -exponent;

double result = powerwithunsignedexponent(base, ab***ponent);

if (exponent < 0)

result = 1.0 / result;

return result;

}int main()

面試題 數值整數次方

實現函式double power double base,int exponent 求base的exponent次方。不得使用庫函式,同時不需要靠考慮大數問題。看到這個問題,我覺得我跟大多數人想的是一樣,直接迴圈作乘法。但是仔細一想,考慮的還是太少了。從底數和指數兩方面分別考慮 有這麼幾種情況我們不...

面試題11 數值的整數次方

題目 實現函式double power double base,int exponent 求base的exponent次方。不得使用庫函式,同時不需要考慮大數問題。這道題目有以下幾點需要注意 0的0次方是無意義的,非法輸入 0的負數次方相當於0作為除數,也是無意義的,非法輸入 base如果非0,如果...

面試題11 數值的整數次方

面試題11 題目 實現函式double power double base,int exponent 求base的exponent次方。不使用庫函式,不考慮大數問題。需要考慮的是當輸入的指數 exponent 為0或負數的情況。bool g invalidinput false 採用全域性變數來標識...