【劍指offer】12.數值的整數次方

題目

給定一個double類型的浮點數base和int類型的整數exponent。求base的exponent次方。ios


分析

  1. 首先須要注意0的0次方這種特殊狀況,注意定義判斷浮點數相等的函數,結果返回0;
  2. 因爲題目爲指明exponent是否大於0,所以若exponent小於0,首先先將計算base的(-exponent)次方的結果,而後取其結果的倒數;
  3. 定義base的無符號整型exponent的次方計算函數,利用遞歸方式進行計算。注意exponent的奇偶性。
  4. 利用右移代替除法,有按位與來判斷奇偶性;

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

相關文章
相關標籤/搜索