題目
給定一個double類型的浮點數base和int類型的整數exponent。求base的exponent次方。ios
分析
- 首先須要注意0的0次方這種特殊狀況,注意定義判斷浮點數相等的函數,結果返回0;
- 因爲題目爲指明exponent是否大於0,所以若exponent小於0,首先先將計算base的(-exponent)次方的結果,而後取其結果的倒數;
- 定義base的無符號整型exponent的次方計算函數,利用遞歸方式進行計算。注意exponent的奇偶性。
- 利用右移代替除法,有按位與來判斷奇偶性;
github連接以下:JZ12-數值的整數次方git
C++代碼
#include <iostream> #include <cmath> using namespace std; class Solution { public: bool equal(double m,double n){ return fabs(m-n) < 0.000001; } double Power_unsigned(double base, int exponent){ if(exponent == 0){ return 1.0; }else if(exponent == 1){ return base; }else{ double result = this->Power_unsigned(base,exponent >> 1); result *= result; if(exponent & 0x1 == 1){ // exponent爲奇數 result *= base; } return result; } } double Power(double base, int exponent) { if(exponent == 0 && this->equal(base,0.0)){ return 0.0; } bool flag = (exponent < 0 )? true:false; unsigned int abs_exponent = (unsigned int)(exponent); if(flag){ abs_exponent = (unsigned int)(-exponent); } double result = this->Power_unsigned(base,abs_exponent); if(flag){ result = 1.0 / result; } return result; } }; int main(){ double m; int n; Solution s; while(cin>>m>>n){ cout<<s.Power(m,n)<<endl; } return 0; }
本文分享 CSDN - 追夢者_AIer。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。github