題目描述
給定一個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;
}
};