数值的整数次方

数值的整数次方。

在解题的过程中,需要先想清楚解题思路,然后再解题。
在这里,用到了高中学习到的分类讨论的思想:
      
 首先,需要判断 输入参数的范围
  • base,分情况讨论:0和非0
  • exponent正数和负数,所进行的计算方法不一样.
  • exponent为负数时,结果为绝对值的倒数!
  • 优化的地方:计算幂函数值,可以使用递归来计算。
基本思路:
  1. 输入base和exponent.
  2. 第一步,判断base是否为0,若是,则需要保证exponent>=0;
  3. 第二步,判断exponent是否为正数,若是,则结果为 base的exponent次方。若是负数,则结果为倒数!
  4. 计算  base^abs(exponent)次方。
  5. 根据exponent的正负,返回对应的结果。
我写的代码如下:

publicclassSolution {
    public double Power(double base, int exponent) {
        if(base == 0.0 && exponent <=0){
            return 0.0;
        }
        if(exponent == 0){
            return 1;
        }
        double result = 0;
        boolean positive = exponent < 0?false:true;
        double absResult = PowerCore(base,exponent);
         
        if(positive)
            result = absResult;
        else
            result = 1.0/absResult;
        return result;
}
         
    // 此处,使用递归来求解
    /*
    a^n = a^(n/2)*a^(n/2),n为偶数时;
    a^n = a^(n/2)*a^(n/2)*a;
    */
    publicdoublePowerCore(doublebase, intexponent) {
        if(exponent == 0){
            return1;
        }
        if(exponent == 1){
            returnbase;
        }
        // 判断是奇数还是偶数
        // n & 1的效果,等效于 n%2
        if((exponent&0x1) == 1){
            returnbase*PowerCore(base,exponent/2)* PowerCore(base,exponent/2);
        }else{
            returnPowerCore(base,exponent/2)* PowerCore(base,exponent/2);
        }
    }
}

较为简洁的代码如下:
 public class Solution {
    public double Power(double base, int exponent) { 
        if(exponent==0 && base != 0)
            return 1;
        if(exponent==1)
            return base;
        if(base == 0 && exponent <= 0){
            throw new RuntimeException();
        }
        if(base ==0 && exponent>0){ 
            return 0;
        }
        int n= exponent;
        if(exponent<0){
            n = -exponent;
        }
        double  result=Power(base,n>>1);// 此处,使用位运算,来进行取半,值得学习
        result*=result;
        if((n&1)==1)
            result*=base; 
        if(exponent<0)
            result=1/result;
        return result;     
  }
}

全部评论

相关推荐

老板加个卤鸡蛋:HR看了以为来卧底来了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
正在热议
更多
# AI面会问哪些问题? #
24476次浏览 480人参与
# 中国电信笔试 #
31011次浏览 283人参与
# 米连集团26产品管培生项目 #
12919次浏览 285人参与
# 你的实习产出是真实的还是包装的? #
18635次浏览 329人参与
# 如果秋招能重来,我会____ #
96616次浏览 500人参与
# 春招至今,你的战绩如何? #
59439次浏览 535人参与
# 开放七大实习专项,百度暑期实习值得冲吗 #
14048次浏览 209人参与
# i人适合做什么工作 #
36838次浏览 124人参与
# 我是面试官,请用一句话让我破防 #
79444次浏览 219人参与
# 哪些公司真双非友好? #
69176次浏览 287人参与
# 找AI工作可以去哪些公司? #
7561次浏览 179人参与
# 从事AI岗需要掌握哪些技术栈? #
7528次浏览 238人参与
# 面试尴尬现场 #
220729次浏览 861人参与
# 投递几十家公司,到现在0offer,大家都一样吗 #
339792次浏览 2163人参与
# 五一之后,实习真的很难找吗? #
102792次浏览 584人参与
# 金三银四,你的春招进行到哪个阶段了? #
21492次浏览 275人参与
# 你做过最难的笔试是哪家公司 #
29736次浏览 182人参与
# 你小时候最想从事什么职业 #
159832次浏览 2072人参与
# 阿里笔试 #
176137次浏览 1300人参与
# 应届生第一份工资要多少合适 #
20463次浏览 84人参与
# 一张图晒出你司的标语 #
3784次浏览 71人参与
# 面试被问期望薪资时该如何回答 #
382445次浏览 2163人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务