题目描述:给定一个 double 类型的浮点数 base 和 int 类型的整数 exponent,求 base 的 exponent 次方。
import Foundation
class For11Solution {
func power(_ b: Double,_ e: Int) -> Double {
var base = b
var exponent = 0
if e > 0 {
exponent = e
}else if e < 0 {
if base == 0 {
return 0 //分母不能为0
}
exponent = -e
}else {
return 1
}
var res : Double = 1
while exponent != 0 {
if exponent & 1 == 1 {
res *= base
}
base *= base
exponent = exponent>>1
}
return e > 0 ? res : 1/res
}
}
算法思想:
/**
- 1.全面考察指数的正负、底数是否为零等情况。
- 2.写出指数的二进制表达,例如13表达为二进制1101。
- 3.举例:10^1101 = 10^000110^010010^1000。
- 4.通过&1和>>1来逐位读取1101,为1时将该位代表的乘数累乘到最终结果。
*/
github地址:https://github.com/cubegao/LeetCode