牛客-剑指offer-java or python

牛客-剑指offerNo.13-java or python

No.12.数值的整数次方

给定一个double类型的浮点数base和int类型的整数exponent。
求base的exponent次方。
i: double: base; int : exponent
o: base^exponent

思路

本题主要考察对情况考虑的全面性,求次方用迭代相乘的方法即可,但要考虑:
1.指数为负时,①不是迭乘了,而是迭乘后做分母,分子为1.。②底数不能为0,为零时可以抛异常等告知用户。
2.指数为0, 结果为1.

!!3.值得注意的是:次幂问题可以进行优化,即,次幂对半减化法。
eg:232=(216)2 偶数
231=(215)2*2 奇数
这样就可以使用递归啦 ,

小技巧:判断奇偶,用位与更简便
右移可以代替除以2
位与可以代替求余%

2°,直接使用数学函数,或者迭乘

code

// java1——递归
public class Solution {
    public double Power(double base, int exponent) {
        int flag=exponent&1;
        if(exponent==0&&base!=0){
            return 1;
        }
        if(exponent==1){
            return base;
        }
        int n=exponent;
        if(exponent<0){
            n=-n;
            if(base==0){
            throw new IllegalArgumentException("Wrong");
            }
        }
        double result=Power(base,n>>1);
        result*=result
        if(flag==1){
            result*=base;
        }
        if(exponent<0){
            return 1/result;
        }
        return result;
  }
}
//java2——循环迭乘
public double Power(double base, int exponent) {
    int result=1;
    for(int i=0;i<Math.abs(exponent);i++){
        result*=base;
    }
    if(exponent<0){
    result=1/result;
    }
    return result;
}

#python
def Power(base,exponent):
    return base**exponent
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值