【12】数值的整数次方
- 时间限制:1秒
- 空间限制:32768K
题目描述
给定一个double类型的浮点数base和int类型的整数exponent。
求base的exponent次方。
牛客网题目链接:题目链接
代码:
#include<iostream>
using namespace std;
class Solution {
public:
double Power(double base, int exponent) {
double P=1;
if(exponent<0)
{
base=1/base;
for(int i=1; i!=exponent*(-1)+1; i++)
{
P=P*base;
}
return P;
}
else if(exponent==0) return 1;
else
{
for(int i=1; i!=exponent+1; i++)
{
P=P*base;
}
return P;
}
}
};
int main()
{
Solution S1;
double a1;
int a2;
while(1)
{
cin>>a1>>a2;
cout<<S1.Power(a1,a2)<<endl;
}
}
改进版:
class Solution {
public:
double Power(double base, int exponent) {
//非法情况
if(!base && !exponent) return 0;
if(!base) return 0;
double result=1;
int e=exponent>0?exponent:-exponent;
while(e--)
{
result*=base;
}
return exponent>0?result:(1/result);
}
};
方法二:递归
class Solution {
double PowerWithUnsigned(double base, int n)
{
if(n==0) return 1;
if(n==1) return base;
double result=PowerWithUnsigned(base, n>>1);
result*=result;
if(n&0x1==1) //判断奇偶
result*=base;
return result;
}
public:
double Power(double base, int exponent) {
if(!base && !exponent) return 0;
if(base>-0.0001&&base<0.0001) return 0;
int n=exponent>0?exponent:(-exponent);
double result=PowerWithUnsigned(base,n);
return exponent>0?result:(1/result);
}
};