實現函式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...