数值的整数次方

数值的整数次方。

在解题的过程中,需要先想清楚解题思路,然后再解题。
在这里,用到了高中学习到的分类讨论的思想:
      
 首先,需要判断 输入参数的范围
  • 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;     
  }
}

全部评论

相关推荐

关于“实习生工资多少才算正常”,其实并没有一个放之四海而皆准的标准,但如果结合一线城市的生活成本、工作强度以及实习本身创造的价值来看,我个人认为6000&nbsp;元左右应当是一个基本及格线,也就是每天&nbsp;200&nbsp;多元。如果能达到&nbsp;300、400&nbsp;元一天,甚至更高,那无疑是更理想的状态。首先,从现实成本看,房租、通勤、餐饮几乎都是刚性支出。低于这个水平的实习,往往意味着实习生需要用家庭或存款“倒贴”工作,这在长期来看并不合理。实习本质上是学习,但并不等于“廉价劳动力”,更不应该是经济压力的来源。其次,愿意给实习生更高薪资的公司,通常不会是差公司。这至少说明两点:一是公司资金相对充足,不是靠压缩人力成本勉强维持;二是公司认可实习生的价值,希望你真正参与业务、创造产出,而不是只做边角料工作。很多高薪实习往往伴随着更规范的培养体系、更高的信息密度和更真实的项目经验。当然,高工资并不等于一切,但它往往是一个重要信号。能给到&nbsp;300、400&nbsp;元一天甚至更多的公司,往往对效率、能力和长期发展更有追求,也更可能处在一个有前景的赛道中。总结来说,实习工资不仅是钱的问题,更是公司态度、实力和发展前景的体现。在条件允许的情况下,争取一份“付得起你时间”的实习,本身就是一种理性选择。
北国牛马:你是不是忘了你一周只能上五天班,月薪6000那你日薪就得300了,日薪200一个月也就4000,也就刚好覆盖生活成本了
实习生工资多少才算正常?
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务