這道面試題看似簡單,但很容易忽略一些細節問題。當指數為負數時,我們可以先對指數求絕對值,然後算出次方再求倒數。既然要求倒數了,我們很自然想到有沒有可能對 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 採用全域性變數來標識...