https://leetcode-cn.com/problems/shu-zhi-de-zheng-shu-ci-fang-lcof/
实现函数double Power(double base, int exponent),求base的exponent次方。不得使用库函数,同时不需要考虑大数问题。
示例 1:
输入: 2.00000, 10
输出: 1024.00000
示例 2:
输入: 2.10000, 3
输出: 9.26100
示例 3:
输入: 2.00000, -2
输出: 0.25000
解释: 2-2 = 1/22 = 1/4 = 0.25
说明:
-100.0 < x < 100.0
n 是 32 位有符号整数,其数值范围是 [−2^31, 2^31 − 1] 。
思路:x可能为正数、0、负数多种情况,同时还要考虑到x为1和-1两种特殊情况
n取值范围为 [−2^31, 2^31 − 1],故也要考虑n=−2^31时转换为正数超限的情况
class Solution {
public double myPow(double x, int n) {
//任何非0数的0次方都是1
if(n==0){
return 1;
}
//当x为0时任何非0次方都是0,浮点数判断等于0不能直接==
if(Math.abs(x)<0.000000000001){
return 0;
}
//x为1则返回1
if(Math.abs(x-1)<0.0000000001){
return 1;
}
//x为-1则根据n是否为奇数判断返回-1还是1
if(Math.abs(x+1)<0.0000000001){
if(n%2==1){
return -1;
}
else{
return 1;
}
}
//n大于0
if(n>0){
double res=1;
for(int i=0;i<n;i++){
res=res*x;
//若当前已接近于0则直接输出0
if(Math.abs(res)<0.00000001){
break;
}
}
return res;
}
//n小于0时要考虑最小值
if(n<0){
x=1.0/x;
double res=1;
//用long循环,不怕n最小值转为正数时越界
for(long i=0;i<-(long)n;i++){
res=res*x;
if(Math.abs(res)<0.00000001){
break;
}
}
return res;
}
return 0;
}
}