数值的整数次方

题目描述

给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
 
保证base和exponent不同时为0
 

思路分析:

  • key1: 可以使用暴力法直接循环求得base的exponent次方
  • key2: 使用递归的快速幂运算,比如求base的32次方,等于求base的16次方的平方,然后求16次方等于求8次方的平方,依次类推。exponent分为奇数和偶数,因此需要进行一个判断,当为奇数时最后会 *base。具体思路可以参考剑指offer。
  • 同时还要注意几个点,base和exponent为0、1的时候,当exponent为负数的时候,应先求的绝对值的次方,最后在进行 1/result。

 

代码:

public class Solution {
    public double Power(double base, int exponent) {
        boolean flag = exponent < 0;
        if (base == 0){
            return 0;
        }
        if (flag){
            exponent = -exponent;
        }
        double result = getPower(base, exponent);
        return flag ? 1/result : result;
  }
    public double getPower(double base, int exp){
        if(exp == 0){
            return 1;
        }
        if(exp == 1){
            return base;
        }
        double result = getPower(base, exp >> 1);
        result *= result;
        if((exp & 1) == 1){
            result *= base;
        }
        return result;
    }
}

 

posted @ 2020-04-14 10:57  Coding-Liu  阅读(120)  评论(0)    收藏  举报