【剑指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

相关文章
相关标签/搜索