C语言求幂计算的高效解法
本文实例演示了C语言求幂计算的高效解法。很有实用价值。分享给大家供大家参考。具体方法如下:
题目如下:
给定base,求base的幂exp
只考虑基本功能,不做任何边界条件的判定,可以得到如下代码:
#include<iostream>
usingnamespacestd;
intcacExp(intbase,intexp)
{
intresult=1;
inttheBase=1;
while(exp)
{
if(exp&0x01)
result=result*base;
base=base*base;
exp=exp>>1;
}
returnresult;
}
intgetRecurExp(intbase,intexp)
{
if(exp==0)
{
return1;
}
if(exp==1)
{
returnbase;
}
intresult=getRecurExp(base,exp>>1);
result*=result;
if(exp&0x01)
result*=base;
returnresult;
}
intmain()
{
for(inti=1;i<10;i++)
{
intresult=cacExp(2,i);
//intresult=getRecurExp(2,i);
cout<<"result:"<<result<<endl;
}
return0;
}
再来看看数值的整数次方求解方法:
#include<iostream>
usingnamespacestd;
boolequalZero(doublenumber)
{
if(number<0.000001&&number>-0.000001)
returntrue;
else
returnfalse;
}
double_myPow(doublebase,intexp)
{
if(exp==0)
return1;
if(exp==1)
returnbase;
doubleresult=_myPow(base,exp>>1);
result*=result;
if(exp&0x01)
result*=base;
returnresult;
}
double_myPow2(doublebase,intexp)
{
if(exp==0)
return1;
doubleresult=1;
while(exp)
{
if(exp&0x01)
result*=base;
base*=base;
exp=exp>>1;
}
returnresult;
}
doublemyPow(doublebase,intexp)
{
if(equalZero(base))
return0;
if(exp==0)
return1;
boolflag=false;
if(exp<0)
{
flag=true;
exp=-exp;
}
doubleresult=_myPow2(base,exp);
if(flag)
{
result=1/result;
}
returnresult;
}
voidmain()
{
doublebase=2.0;
intexp=-5;
doubleresult=myPow(base,exp);
cout<<"result:"<<result<<endl;
}
相信本文所述对大家C程序算法设计的学习有一定的借鉴价值。
热门推荐
10 八一幼儿祝福语大全简短
11 公司乔迁食堂祝福语简短
12 婚礼结束聚餐祝福语简短
13 儿媳买车妈妈祝福语简短
14 毕业送礼老师祝福语简短
15 同事辞职正常祝福语简短
16 恭贺新婚文案祝福语简短
17 金店立秋祝福语简短英文
18 婆婆高寿祝福语大全简短