数值的整数次方
题目描述
给定一个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; } }

浙公网安备 33010602011771号