实现函数 double Power(double base, int exponent),求base的exponent次方。
注意:
- 保证base和exponent不同时为0。
- 不得使用库函数,同时不需要考虑大数问题
- 有特殊判题,不用考虑小数点后面0的位数。
数据范围:∣base∣≤100 ,∣exponent∣≤100 ,保证最终结果一定满足∣val∣≤104
进阶:空间复杂度 O(1),时间复杂度 O(n)
输入: 2.00000,3 返回值: 8.00000示例2
输入: 2.10000,3 返回值: 9.26100示例3
输入: 2.00000,-2 返回值: 0.25000 说明: 2的-2次方等于1/4=0.25思路/解法 方式一
次方根如果是偶数,对其进行出2,直至等于1,比如8次方根,那么就是8/2 = 4/2 = 2/2 = 1,这个过程总共有3次,比如3^8,原本需要进行8次乘法,而我们记录了3次,此时我们只需要进行3次乘法即可,即(((3*3)*9)*81),因为3*3我们已经算出等于9了,以此类推即可。如果是奇数,我们先对其进行减1操作,其它步骤与偶数相同。
class Solution {
public:
double Power(double base, int exponent) {
bool isFu = false;//判断是否为负数次方根
if(exponent < 0)
{
exponent *= (-1);
isFu = true;
}
bool isStrange = false;//判断是否为奇数
if(exponent % 2 != 0)
{
isStrange = true;
exponent -= 1;
}
int count = 0;//记录除2次数
while(exponent != 0 && exponent % 2 == 0)
{
count++;
exponent /= 2;
}
double res = 1;//记录结果
//该情况exponent一开始为奇数,比如7,那么7-1 = 6,6/2 = 3,即不管如何都应该进行3次暴力乘法
for(int i = 0;i
方式二
暴力线性求次方根。
class Solution {
public:
double Power(double base, int exponent) {
bool isFu = false;
if(exponent < 0)
{
exponent *= (-1);
isFu = true;
}
double res = 1;
for(int i = 0;i 


