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程序算法设计的学习有一定的借鉴价值。