辣条走起,每个月的刷题99元奖励靠大家了
今天的题目 每天的题目见github(看最新的日期): https://github.com/gzc426 具体的题目可以去牛客网对应专题去找。
每天一道剑指offer-牛客网数值的整数次方 来源:牛客网对应专题
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
思路
代码
public class Solution {
public double Power(double base, int exponent) {
if(exponent == 0)//指数如果是0
{
if(equalZero(base) == true)//底数是0则返回0
return 0;
return 1;//除了0的任何数的0次方是1
}
if(exponent > 0)//指数大于0
{
return complex(base,exponent);//直接计算base的exponent次方返回即可
}
if(equalZero(base))//底数是0,指数小于0,因为如果指数大于0,在前面已经返回了!
{
if(base > 0)//底数是正0,那么就是正无穷
return Double.POSITIVE_INFINITY;
if(exponent % 2 == 0)//指数是偶数次方
return Double.POSITIVE_INFINITY;//返回正无穷
return Double.NEGATIVE_INFINITY;//其它结果负无穷
}
return 1 / complex(base,exponent);//可以知道除了上述结果,其它都是指数是负数。比如2的-3次方,先计算2的3次方,最后求倒数。
}
double complex(double base,int exponent)
{
double result = 1.0;
if(exponent < 0)//如果指数小于0,比如2的-3次方,先计算2的3次方,然后求倒数
exponent = 0 - exponent;
for(int i=0;i<exponent;i++)
result = result * base;
return result;
}
boolean equalZero(double base)
{//判断一个doule类型的数是不是0,必须这样判断,不能直接与0进行比较,因为浮点数本身不精确
if(base >0 && base < 0.00000001)
return true;
if(base < 0 && base > -0.00000001)
return true;
return false;
}
}
代码截图(为了避免代码排版错乱)