劍指offer-數值的整數次方(python和c++)

題目描述

給定一個double類型的浮點數base和int類型的整數exponent。求base的exponent次方。

保證base和exponent不同時爲0

思路1:
最簡單的思路就是先討論指數和底數是否爲0的情況,在按指數的正負進行分類處理。這裏不用管底數的正負(底數帶着符號進行冪乘的,所以正負不用管)。

給出python版本:

# -*- coding:utf-8 -*-
class Solution:
    def Power(self, base, exponent):
        result = 1
        if base == 0:
            return 0
        if exponent == 0:
            return 1
        if exponent < 0:
            for i in range(-exponent):
                result = result * base
            return 1/result
        for i in range(exponent):
            result = result * base
        return result

思路2:

快速冪算法。。。快到爆炸,附上大佬文章,一看就懂。

https://blog.csdn.net/qq_19782019/article/details/85621386

python

def fast_power(self, base, exponent):
        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):
                res =res * tmp
            e = e >> 1
            tmp = tmp * tmp
        return res if exponent > 0 else 1/res

c++
c++代碼差不多,重要的是思想

class Solution {
public:
    double Power(double base, int exponent) {
        long long p = abs( (long long) exponent);
        double r = 1.0;
        while (p) {
            if (p & 1)
                r *= base;
            base *= base;
            p >>= 1;
        }
        return ( exponent > 0 ) ? r : 1/r;
    }
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章