描述:
实现函数double Power(double base, int exponent),求base的exponent次方。不得使用库函数,同时不需要考虑大数问题。
示例 1:
输入: 2.00000, 10
输出: 1024.00000
示例 2:
输入: 2.10000, 3
输出: 9.26100
示例 3:
输入: 2.00000, -2
输出: 0.25000
解释: 2-2 = 1/22 = 1/4 = 0.25
说明:
-100.0 < x < 100.0
n 是 32 位有符号整数,其数值范围是 [−231, 231 − 1] 。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/shu-zhi-de-zheng-shu-ci-fang-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
思路:
- 不能遍历n,会超时
- 对n循环除2直到值为1,n除以2相当于x做了平方
- 注意n为奇数时的情况
代码:
func myPow(x float64, n int) float64 {
if n == 0 {
return 1
}
if n < 0 {
x, n = 1 / x, -n
}
//slice保存每轮循环n为奇数时x的值
slice := make([]float64,0)
for ; n != 1 ; {
if n%2 != 0 {
slice = append(slice,x)
}
x *= x
n = n/2
}
for _, v := range slice {
x *= v
}
return x
}
测试代码:
package main
import "fmt"
func main() {
//0.00001
//2147483647
t := myPow(2,11)
fmt.Println(t)
}
func myPow(x float64, n int) float64 {
if n == 0 {
return 1
}
if n < 0 {
x, n = 1 / x, -n
}
//slice保存每轮循环n为奇数时x的值
slice := make([]float64,0)
for ; n != 1 && n != -1 ; {
if n%2 != 0 {
slice = append(slice,x)
}
x *= x
n = n/2
}
for _, v := range slice {
x *= v
}
return x
}