题目
给定一个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