题目的意思是实现一个pow 函数。
Input: 2.00000, 10
Output: 1024.00000
这里用的是递归的办法,能够降低时间复杂度,不过需要对n进行奇数,偶数进行判断,用了&0x1进行判断,当判断n为奇数的时候,乘上x。
代码如下:
class Solution {
public:
double myPow(double x, int n) {
//若n为0,则直接返回1。
if(n==0)
{
return 1;
}
bool flag=false;
//标记是否是负数
if(n<0)
{
flag=1;
}
//转换为非负数
int unsigned_n=abs(n);
//若n为1返回x
if(n==1)
{
return x;
}
//递归调用,同时unsigned_n/2
double result=myPow(x, unsigned_n/2);
//n=n/2+n/2(+1)
result=result*result;
if(unsigned_n&0x1)
{
result*=x;
}
//若是负数的话,直接用1.0/result
if(flag)
{
return 1.0/result;
}
return result;
}
};