題目:求乙個數的整數次方。
題目是如此的簡單,但是需要考慮的還是比較多:
1.指數為負,底數是零;
2.指數底數都是零;
3.返回正常零和返回錯誤零的區別;
4.底數為正,指數為負如何處理;
5.考慮底數次方大的話,想效率問題;
6.處理double數值相等問題;
以下直接是**,詳細考慮除底數指數全零的以上所有情況!
#pragma once
/**base是底數 exponent是指數
*/bool g_input = false; //錯誤時,返回零,和正常返回零區別
double power(double base, int exponent)
unsigned int ab***ponent = (unsigned int)(exponent);
if (exponent < 0) //如果指數為負,先換成正的處理
ab***ponent = (unsigned int)(-exponent);
double result = powerwithunsingnedexponent(base, ab***ponent); //最終結果
if (exponent < 0) //如果指數為負,結果就是正數的倒數
result = 1.0 / result;
return result;
}//將乙個數的次方拆分,2為拆分單元 提高效率
double powerwithunsingnedexponent(double base, unsigned int exponent)
//兩個double數是否相等,不能用絕對的相等來寫,兩個double數滿足如下,就判相等
bool equal(double num1, double num2)
void test()
賜教! 求某個數的整數次方
題目 實現函式double power double base,int exponent 求base的exponent次方。不需要考慮溢位。這裡直接求解的 應該不難寫,這裡先考慮比較簡單的情況,即base非0,exponent大於0。當然,有更好的解法,不然就不寫這blog了。更好的解法是基於下面的...
求乙個數的臨近的較大的2的整數次冪
被面試官問了這麼一道題.一問,想到,左移就好了。就會很自然的寫下這種方法 unsigned int f2 unsigned int val return retval 在改進一下,就判斷他是不是2的次方先。如果是的話,可以直接返回。就可以得到這種方法。面試官又說,不能用迴圈遞迴,函式庫。這下麻煩了。...
位運算的應用 判斷乙個數是不是2的整數次方
題目描述 判斷乙個數是不是2的整數次方,只能用一條語句。這個題其實不用位運算的方法也可以,用log2取整也可以。下面給出位運算的做法。2的二進位制為10 4的二進位制為100 8的二進位制為1000 2 n的二進位制為1000 0000 發現2的整數次方的二進位制中均只有乙個1.include us...