面試題11 數值的整數次方

2021-06-25 14:16:43 字數 1404 閱讀 4244

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

這道題目有以下幾點需要注意:

0的0次方是無意義的,非法輸入

0的負數次方相當於0作為除數,也是無意義的,非法輸入

base如果非0,如果指數exponent小於0,可以先求base的|exponent|次方,然後再求倒數

判斷double型別的base是否等於0不能使用==號。因為計算機表述小樹(包括float和double型小數)都有誤差,不能直接使用等號(==)判斷兩個小數是否相等。如果兩個數的差的絕對值很小,那麼可以認為兩個double型別的數相等。

根據以上四個注意點,我們可以寫出求指數的程式,**:

#include

#include

#include

using

namespace

std;  

bool

g_invalid = 

false

;  //由於計算機表示小數(float,double)都有誤差,不能直接用等號(==)來判斷兩個數是否相等

//所以若兩個數的差的絕對值很小很小,比如小於0.0000001,就可以認為他們是相等的

bool

equal(

double

num1, 

double

num2)  

//傳進來的exp是》=0的

double

powerexp(

double

base, unsigned 

intexp)  

double

power(

double

base, 

double

exp)  

//取指數的絕對值

unsigned int

ab***p;  

if(exp < 0)  

ab***p = (unsigned int

)(-exp);  

else

ab***p = (unsigned int

)(exp);  

double

res = powerexp(base,ab***p);  

//指數小於0,則取倒數

if(exp < 0)  

res = 1.0/res;  

return

res;  

}  int

main()  

//注意輸出格式,科學計數法的表示

else

printf("%.2ef\n"

,res);  

}  }  

return

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...

面試題11數值的整數次方

題目 實現函式double power double base,int exponent 求base的exponent次方。不得使用庫函式,同時不需要考慮大樹問題。這道題目有以下幾點需要注意 0的0次方是無意義的,非法輸入 0的負數次方相當於0作為除數,也是無意義的,非法輸入 base如果非0,如果...