一、要求
求base的exponent次方,如(2,4)输出16,(2,-3)输出0.125
二、思路及代码
几个知识点:
python中将数据转化为二进制:bin(num)
位与,判断数据是奇数还是偶数:num&1
数据右移1位,实现除以2取整操作:num>>1
判断一个数是否等于0,不能直接写a==0,因为计算机表示小数有误差,可用a-0.0<0.000001判断
_________________________________________________
用递归实现:
当n为偶数, a^n = a^(n/2) * a^(n/2)
当n为奇数, a^n = a^((n-1)/2) * a^((n-1)/2)) * a
利用右移一位运算(num>>1)代替除以2并取整
利用位与运算(&1)代替了求余运算法%来判断一个数是奇数还是偶数
需要考虑的特殊情况:
由于采用了右移需要考虑:n=0、1,这也是迭代的返回点
输入类型错误:如0^(-2),不能对零除
为了程序的可读性,将指数n采取先取绝对值再判断正负。
def solution(a,n): if(a-0.0<0.0000001)& n<0: return('zeroError') if n==1: return a if n==0: return 1 result=solution(a,abs(n)>>1) result*=result if abs(n)&1==1: result*=a if n<0: return 1/result else: return result print(solution(2,3)) print(solution(2,-3)) print(solution(2,0))
三、运行结果
80.125
1
四、思考与总结
无