您的位置:首页 > 职场人生

剑指offer 面试题11 求整数次幂

2014-12-20 16:33 295 查看
</pre><p><pre name="code" class="cpp">#include <iostream>
using namespace std;
bool invalidinput=false;
bool equal(double num1,double num2){
if((num1-num2<0.0000001)&&(num1-num2>-0.0000001))
return true;
else
return false;
}
double powcore(double base,unsigned int absexp){
double result=1;
for(int i=0;i<absexp;++i){
result=result*base;
}
return result;
}
double powcore_bit(double base,unsigned int absexp){
double result=1;
while(absexp!=0){
if(absexp&1)
result*=base;
absexp=absexp>>1;
base=base*base;
}
return result;
}
double pow(double base, int exp){
invalidinput=false;
if(equal(base,0.0)&&exp<=0){
invalidinput=true;
return 0.0;
}
unsigned int absexp=(unsigned int) exp;
if(exp<0)
absexp=(unsigned int)(-exp);
double result=powcore_bit(base,absexp);
//double result=powcore(base,absexp);
if(exp<0)
result=1/result;
return result;
}
int main(){
double base;
int exp;
//int a=(1<<31);
//cout<<a<<'\n';
//cout<<(unsigned int)a<<'\n';
//cout<<(unsigned int)((1<<31)>>31);
cin>>base>>exp;
cout<<pow(base,exp);
}


底数为0

指数为负

一个double数是否=0的判断

位操作求幂
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: