题目
数值的整数次方
一、思路一
暴力循环,需要考虑的问题是,如果指数是负数,如何计算?如果指数是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