题目描述
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
保证base和exponent不同时为0
示例1
输入
2,3
返回值
8.00000
题目本身不是很难,但是要注意考虑多种情况
要考虑exponent==0的情况和exponent<0的情况,当exponent<0的时候还要考虑base等于0的情况,同时由于base为double类型,因此要特别注意不能写成
base==0.0,而应该写成abs(base-0.0)<Epslion
class Solution { private: double Epslion = 1e-8; public: double Power(double base, int exponent) { if(abs(base-0.0)<Epslion) return 0; if(exponent < 0) return 1/Power(base, abs(exponent)); else if(exponent == 0) return 1; else{ if(exponent==1) return base; else return base * Power(base, exponent-1); } } };
剑指offer上高效的写法:
当n为偶数时an=an/2*an/2
当n为奇数时an=an/2*an/2*base
public class Solution { private double e = 1e-8; public double Power(double base, int exponent) { if(Math.abs(base-0.0)<e) return 0.0;//0的0次方可以返回0或者1 if(exponent == 0) return 1; if(exponent == 1) return base; if(exponent < 0){ return 1/Power(base, -exponent); } double result = Power(base,exponent>>1); if((exponent & 0x1)==0) return result * result; else return result * result * base; } }