16.数值的整数次方
Last updated
var res = 1
for _ in 0..<n {
res *= x
}
return resfunc quickpow(_ x: Int, _ n: Int) -> Int {
if n == 0 {// 直到最后指数为0
return 1
}
let res = quickpow(x, n/2)
if n%2 != 0 {// n 为奇数
return res * res * x
}
// n为偶数
return res * res
}func quickpow(_ x: Int, _ n: Int) -> Int {
var res = 1
var x = x
var n = n
while n > 0 {
if n & 1 == 1 { // 如果n的当前末位为1
res *= x // res乘上当前的x
}
x *= x// x自乘,当前指数左移一位
n >>= 1// n右移一位,想当于 n / 2
}
return res
}func myPow(_ x: Double, _ n: Int) -> Double {
// 特殊处理 0 1 -1 可以直接 return 结果
if x == 0 || x == 1 {
return x
}
else if x == -1 {
return (n & 1 == 1 ? -1 : 1)
}
if n == 0 {
return 1
}
else if n < 0 {
return myPow(1/x, -n)
}
else if n == 1 {
return x
}
let temp = myPow(x, n >> 1)
return temp * temp * ((n & 1 == 1) ? x : 1)
}func myPow(_ x: Double, _ n: Int) -> Double {
// 特殊处理 0 1 -1 可以直接 return 结果
if x == 0 || x == 1 {
return x
}
else if x == -1 {
return (n & 1 == 1 ? -1 : 1)
}
if n == 0 {
return 1
}
var ans: Double = 1
var power = abs(n)
var newX = x
while power > 0 {
if power & 1 == 1 {
ans *= newX
}
newX *= newX
power = power >> 1
}
return n < 0 ? 1 / ans : ans
}