【剑指Offer】10数值的整数次方

题目描述

给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。

时间限制:1秒;空间限制:32768K

解题思路

思路一

本题的难点在于考虑问题要全面,要考虑到0^{0}以及exponent为负数的情况。

Python代码:

# -*- coding:utf-8 -*-
class Solution:
    def Power(self, base, exponent):
        # write code here
        result = 1
        if base==0 and exponent==0:
            return 1
        if exponent == 0:
            return 1
        elif exponent > 0:
            for i in range(exponent):
                result = result * base
        else:
            for i in range(-exponent):
                result = result * 1/base
        return result

思路二

使用快速幂算法。

# -*- coding:utf-8 -*-
class Solution:
    def Power(self, base, exponent):
        # write code here
        if base == 0:
            return 0
        if exponent == 0:
            return 1
        e = abs(exponent)
        tmp = base
        res = 1
        while(e > 0):
            #如果最后一位为1,那么给res乘上这一位的结果
            if (e & 1 == 1):     #n&1 等价于 (n%2)==1
                res =res * tmp
            e = e >> 1           #n>>=1 等价于 n/=2
            tmp = tmp * tmp
        return res if exponent > 0 else 1/res

 

posted @ 2018-10-13 15:17  yucen  阅读(142)  评论(0编辑  收藏  举报