zl程序教程

您现在的位置是:首页 >  后端

当前栏目

C语言求幂计算的高效解法

C语言计算 高效 解法
2023-06-13 09:15:46 时间

本文实例演示了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程序算法设计的学习有一定的借鉴价值。