15.数值的整数次方
实现函数double Power(double base, int exponent),求base的 exponent次方。
不得使用库函数,同时不需要考虑大数问题。
只要输出结果与答案的绝对误差不超过 10−2 即视为正确。
注意:
- 不会出现底数和指数同为0的情况
- 当底数为0时,指数一定为正
- 底数的绝对值不超过 10,指数的取值范围 [−231,231−1]。
样例1:
输入:10 ,2
输出:100
样例2:
输入:10 ,-2
输出:0.01
代码:
class Solution {
public double Power(double base, int exponent) {
//将exponent转为long类型,防止-exponent溢出
long n = (long)exponent;
//标记指数是否为负数
boolean flag = n < 0;
//初始化结果为1
double res = 1;
//如果指数为负数,先转为正数计算
if(n<0)n =-n;
//快速幂算法
for (long k = n; k>0; k >>= 1) {
//如果当前位为1,将当前base乘入结果
if ((k & 1) == 1) res *= base;
//base平方
base *= base;
}
//如果指数为负数,返回结果的倒数
if (flag) res = 1 / res;
return res;
}
}