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