每天一道剑指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;      }  }

代码截图(为了避免代码排版错乱

Exit mobile version