面試題 數值整數次方

2021-07-28 23:56:22 字數 1076 閱讀 1232

實現函式double power(double base,int exponent),求base的exponent次方。不得使用庫函式,同時不需要靠考慮大數問題。

看到這個問題,我覺得我跟大多數人想的是一樣,直接迴圈作乘法。但是仔細一想,考慮的還是太少了。從底數和指數兩方面分別考慮:

有這麼幾種情況我們不容忽視,1)對0求倒數出現異常,要做特殊處理;2)0的0次方是沒有任何意義的,需要做特殊處理;3)復次冪即將指數求絕對值,然後再將最後的結果取倒數即可。

仔細閱讀題目就會發現,題目要求底數型別是double型的,那麼在判斷底數是不是等於0時,不能直接判斷base == 0.(計算機在表示小數時都有誤差)。判斷兩個小數是否相等,只能判斷它們之差的絕對值是不是在乙個很小的範圍中。所以將該判斷方法封裝成乙個函式即可  bool equal(double x,double y);

**如下:

//全域性變數用來標識出錯是因為底數為0且指數為負數的情況

bool invaildeinput = false;

//判斷兩個小數是否相等

bool equal(double x,double y)

//計算指數為正整數時的整數次方

double powerunsignedexponent(double base,unsigned int exponent)

return result;

}double power(double base,int exponent)

unsigned int unsignedexponent = (unsigned int)exponent;

if (exponent < 0)

double result = powerunsignedexponent(base,unsignedexponent);

if (exponent < 0)

return result;

}

在此基礎上,還有使用位運算來優化該演算法的方法。這裡並沒有討論,還是想說要多思考,多寫。

面試題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 採用全域性變數來標識...

面試題11 數值的整數次方

這個問題我想很多人拿到之後直接設定乙個for迴圈,讓底數自乘次方和次數就行。但是沒有考慮到底數是0 指數是0 以及指數是負數的情況 coding utf 8 不得使用庫函式,實現數值的整數次方 def power base,exponent answer 1.0 if isequaltozero b...