每天一道剑指offer-牛客网数值的整数次方
- 2019 年 10 月 4 日
- 筆記
辣条走起,每个月的刷题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; } }
代码截图(为了避免代码排版错乱)