题目描述
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方
注意点:
1)对特殊输入的处理,如果是一个数为0,0的负数次方不存在,同时考虑分为数的正数次方和数的负数次方的两种情况。
2)通过递归方式求整数的n次方的时间复杂度是O(logn)
3)使用为运算效率较高。例如数x/2可以使用x>>1代替,x%2可以使用x&1来代替。
代码实现:
class Solution{ public double Power(double base,int exponent){ if(base==0&&exponent<0) throw new RuntimeException("输入不符合规范"); if(exponent==0) return 0; if(exponent>0){ return Power1(base,exponent); } else{ return Power1(1/base,-exponent); } } public double Power1(double base,int exponent){ if(exponent==1) return base; if((exponent&1)==1){ //奇数的时候,要补乘一个base return Power1(base,exponent>>1)*Power1(base,exponent>>1)*base; } else{ //如果是偶数 return Power1(base,exponent>>1)*Power1(base,exponent>>1); } } } class JianZhiOffer{ public static void main(String[] args) { Solution s = new Solution(); System.out.println(s.Power(2, -3)); System.out.println(s.Power(2, 3)); System.out.println(s.Power(2, 4)); } }