【 声明:版权所有,转载请标明出处,请勿用于商业用途。 联系信箱:libin493073668@sina.com】
题目描述
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
思路
我们很容易想到,在指数为0或者正数的时候应该怎么处理,但是有时候我们会忽略负数的状况。
如果考虑到了负数,但是如果仅仅只是简单的处理,还是不能让代码达到完美,我们要考虑两点,一旦负数是int型的边界值,那么这个数变成整数之后就超过了int的正数最大值,那么此时我们需要用unsigned来保存这个指数。
其次,当指数很大的时候,如果我们使用循环来计算次幂的话,会很耗时间,那么我们应该考虑优化的问题,这个时候我们就要使用快速幂来优化了。
class Solution
{
public:
double quick_pow(double base,unsigned b)
{
double ans = 1;
while(b)
{
if(b&1)
{
ans = ans*base;
b--;
}
b>>=1;
base *=base;
}
return ans;
}
double Power(double base, int exp)
{
if(fabs(exp-0.0)<0.00000001)
return 1;
if(base==0)
return base;
unsigned ee;
ee = exp<0?-exp:exp;
cout<<"ee = "<<ee<<endl;
double ans = quick_pow(base,ee);
if(exp>0)
return ans;
return 1.0/ans;
}
};