12 数值的整数次方
题目描述
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
保证base和exponent不同时为0
思路:
tmp & 1 == 1,只能判断最后一位,0011 & 0010 = 0010 = 2.
快速幂的原理相当于将指数变为二进制,分别计算每一二进制位的值然后相乘。
一定记住对于这种有指数的一定要判断是否为负数,将负数转化为整数计算后取反,当然必须判断底数不为0;
*当n为偶数,a^n =(a^n/
2
)*(a^n/
2
)
*当n为奇数,a^n = a^[(n-
1
)/
2
] * a^[(n-
1
)/
2
] * a
*时间复杂度O(logn)
func abs(a int) int { if a < 0 { return -a } return a } func Power( base float64 , exponent int ) float64 { // write code here if base < 0.00000001 && base > -0.00000001 { return 0.0 } if exponent == 0 { return 1.0 } res := 1.0 tmp := abs(exponent) for tmp != 0 { if 1 & tmp == 1 { res = res * base } base = base * base tmp = tmp >> 1 } if exponent < 0 { res = 1.0 / res } return res }