剑指offer 12、数值的整数次方 python和c++
题目描述:
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
保证base和exponent不同时为0
思路1:直接循环乘exponent次的base
python 版
# -*- coding:utf-8 -*-
class Solution:
def Power(self, base, exponent):
if exponent == 1:
return base
if exponent == 0:
return 1
ans = 1
for i in range(abs(exponent)):
ans = ans * base
if exponent>0:
return ans
else:
return 1/ans
# write code here
c++版
class Solution {
public:
double Power(double base, int exponent) {
if (exponent == 1)
return base;
if (exponent == 0)
return 1;
double ans = 1.0;
int e = exponent>0?exponent:-exponent;
for(int i = 0; i<e; ++i){
ans = ans * base;
}
if (exponent>0)
return ans;
else
return 1/ans;
}
};
思路2:快速幂,
python 版
# -*- coding:utf-8 -*-
class Solution:
def Power(self, base, exponent):
if base == 0:
return 0
if exponent == 0:
return 1
e = abs(exponent)
tmp, res = base, 1
while(e > 0):
#如果最后一位为1,那么给res乘上这一位的结果
if (e & 1 == 1): # e & 1 等价于 (e % 2) == 1
res =res * tmp
e = e >> 1
tmp = tmp * tmp
return res if exponent > 0 else 1/res
c++版
class Solution {
public:
double Power(double base, int exponent) {
if (exponent == 1)
return base;
if (exponent == 0)
return 1;
//int e = exponent>0?exponent:-exponent;
int e = abs(exponent);
double tmp = base, ans = 1;
while(e > 0){
//如果最后一位为1,那么给res乘上这一位的结果
if (e&1 == 1) //e & 1 等价于 (e % 2) == 1
ans =ans * tmp;
e = e >> 1;
tmp = tmp * tmp;
}
if(exponent>0)
return ans;
else
return 1/ans;
}
};