数值的整数次方(Python and C++写法)

题目:

  实现函数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

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/shu-zhi-de-zheng-shu-ci-fang-lcof

思路:

  直接使元素相乘会超出运行时间。可以采用分治思想,用递归实现。

Python解法:

 1 class Solution:
 2     def myPow(self, x: float, n: int) -> float:
 3         if n < 0 and x != 0:
 4             return 1.0 / self.myPow(x, -n)
 5 
 6         if n == 0:
 7             return 1
 8 
 9         if n & 1:  # n是奇数
10             return x * self.myPow(x, n-1)
11         return self.myPow(x*x, n>>1)

C++解法:

 1 class Solution {
 2 public:
 3     double myPow(double x, long n) {  // n应改为长整型,防止超出数据范围
 4         if(n < 0 && x != 0) 
 5             return 1 / myPow(x, -n);
 6         if(n == 0)
 7             return 1;
 8         if(n & 1)
 9             return x * myPow(x, n-1);
10         return myPow(x*x, n/2);
11     }
12 };
posted @ 2020-07-01 09:41  孔子?孟子?小柱子!  阅读(210)  评论(0编辑  收藏  举报