题目
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
思路
循环exponent次,进行base相乘即可。
未考虑次方数为负数的情况,计算对应正数的次方,取倒数。
未考虑错误输入,0的负数次方,使得0出现在分母。
改进:
用递归可以减少乘法次数,
用和0x1位与运算得到1,判断是奇数,比%取余数快
用右移代替除2,速度快
代码
def Power(base, exponent):
if exponent < 0 and base == 0:
return 0
absEx = exponent
if exponent < 0:
absEx = -exponent
result = PowerPositive(base, absEx)
if exponent < 0:
result = 1/result
return result
def PowerPositive(base, exponent):
if exponent == 0:
return 1
if exponent == 1:
return base
result = PowerPositive(base, exponent >> 1)
result *= result
if exponent & 0x01 == 1:
result *= base
return result