题目描述
给定一个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;
}
};