58、数值的整数次方

题目

  • 给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。

思路

  • 浮点底数base情况

    • 大于0:直接使用
    • 等于0:特殊考虑
    • 小于0:直接使用
  • 整形指数e的情况

    • 大于0:直接使用
    • 等于0:正常使用
    • 小于0:先对指数求绝对值,然后算出次方结果后再取倒数
  • 综上所述,本题目需要单独考虑的因素为:底数为0并且指数小于0 的情况。如果不进行考虑就会出现对0求倒数的情况

  • 还有一种情况是0的0次方,结果为0或者1,根据面试官的要求确定

  • 对于出现0的负数次方的情况,常用的表示方法为:返回值、全局变量、异常

  • 使用布尔型全局变量表示错误的情况

public class Solution {
    boolean flag = false;
    public double Power(double base, int exponent) {
        if(base==0.0 && exponent<0){
            flag=true;
            return 0.0;
        }
        int absExponent =exponent;
        if(exponent<0){
            absExponent=-exponent;
        }
        double result = PowerWithUnsignedExponent(base,absExponent);
        if(exponent<0){
            result = 1.0/result;
            return result;
        }
        return result;
    }
     public double PowerWithUnsignedExponent(double base, int exponent){
            double result=1.0;
            for(int i=1;i<=exponent;i++){
                result*=base;
            }
            return result;
        }
}
  • 以上代码能够正确的解题目,但不完美。
  • 可以再继续优化:
    • PowerWithUnsignedExponent函数需要完成exponent-1 次的乘数运算,可以通弄过程序优化更进一步
public class Solution {
    boolean flag = false;
    public double Power(double base, int exponent) {
        if(base==0.0 && exponent<0){
            flag=true;
            return 0.0;
        }
        int absExponent =exponent;
        if(exponent<0){
            absExponent=-exponent;
        }
        double result = PowerWithUnsignedExponent(base,absExponent);
        if(exponent<0){
            result = 1.0/result;
            return result;
        }
        return result;
    }
      public double PowerWithUnsignedExponent(double base, int exponent){
            //double result=1.0;
            if(exponent==0)
                 return 1.0;
            if(exponent==1)
                return base;
            double result = PowerWithUnsignedExponent(base,exponent >> 1);
            result*=result;
            if((exponent&0x01)==1){
                result*=base;
            }
            return result;
        }
}
    
全部评论

相关推荐

嵌入式求职之路:可以看我经验😂,https://www.nowcoder.com/share/jump/73221730841876945
点赞 评论 收藏
分享
04-30 21:35
已编辑
长安大学 C++
晓沐咕咕咕:评论区没被女朋友好好对待过的计小将可真多。觉得可惜可以理解,毕竟一线大厂sp。但是骂楼主糊涂的大可不必,说什么会被社会毒打更是丢人。女朋友体制内生活有保障,读研女朋友还供着,都准备订婚了人家两情相悦,二线本地以后两口子日子美滋滋,哪轮到你一个一线城市房子都买不起的996清高计小将在这说人家傻😅
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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