剑指offer实践 ——16.数值的整数次方(python版)



题目

数值的整数次方
在这里插入图片描述


一、思路一

暴力循环,需要考虑的问题是,如果指数是负数,如何计算?如果指数是0并且数字也是0,如何计算?

def Power_1(num, exp):
    flag = False
    if exp < 0:
        flag = True
        exp = abs(exp)
    elif exp == 0:
        if num == 0:
            return None
        else:
            return 1
    res = 1
    for i in range(exp):
        res *= num

    return res if not flag else -res

二、思路二

思路一提供的方式,如果在求某个数的32次方,我们需要计算31次。但是如果我们先求平方,对平方求平方即四次方,在对四次方求平方即八次方,对八次方求平方即十六次方,对十六次方求平方即三十二次方,我们总共运算了5次。
每次将指数右移1位,则相当于开方求整,直到递归至最小单位。

def Power_2(num, exp):
    ''''''
    print(1)
    flag = False
    if exp < 0:
        flag = True
        exp = abs(exp)
    elif exp == 0:
        if num == 0:
            return None
        else:
            return 1
    if exp == 1:
        return num
    res = Power_2(num, exp >> 1)
    res *= res
    # 判断当前的指数是否是1
    if exp & 0x1 == 1:
        res *= num
    return res if not flag else -res
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值