劍值offer66題之每日一題——第十二題
阿新 • • 發佈:2018-12-17
題目描述:
給定一個double型別的浮點數base和int型別的整數exponent。求base的exponent次方。
思路:1.當底數小於0且指數大於0,出現除0錯誤要處理
2.判斷double底數是否為0,不能用==
3.優化求冪運算:n=偶數:b的n次方=b的(n/2)次方 * b的(n/2)次方;n=奇數:b的n次方=b的((n-1)/2)次方* b的((n- 1)/2)次方 * b。
4.除2運算用左移:e>>1
5.判斷奇數用(e&1)==1
程式碼實現:
bool equal(double a,double b) { if(abs(a-b)<0.000001) return true; else return false; } double Power(double base, int exponent) { if(equal(base,0.0)&&exponent<0) return 0.0; int absexponent=abs(exponent); double result=getpower(base,absexponent); if(exponent<0) result=(1.0/result); return result; } //優化求冪函式 double getpower(double b,int e) { if(e==0) return 1.0; if(e==1) return b; double result=getpower(b,e>>1);//e左移一位是除以2,求得b的(n/2)次方或者(n-1)/2次方 result*=result;//b的n次方=b的(n/2)次方 * b的(n/2)次方 //或者b的n次方=b的((n-1)/2)次方* b的((n-1)/2)次方 * b if((e&1)==1) result*=b; //指數為奇數 return result; }