剑指Offer之数值的整数次方(题11)
1/****************************************2>FileName:test.c3>Author:xiaoxiaohui4>mail:1924224891@qq.com5>CreatedTime:2016年05月23日星期一22时37分14秒6****************************************/78#include<stdio.h>910intflog=0;11intpower(doublebase,intexponent)12{1314if(equal(base,0,0))//如果底数是0,则返回0.0,并且把flog置为非0值,15{//来检查当返回0时返回的是本身还是出错了。16flog=1;17return0.0;18}1920intexp=exponent;//使指数为正数21if(exponent<0)22{23exp=0-exponent;24}2526intresult=count(base,exp);27if(exponent<0)28{29result=1.0/result;30}3132returnresult;33}3435intequal(doublenum1,doublenum2)36{37if((num1-num2)>-0.0001&&(num1-num2)<0.0001)38{39return1;40}41else42{43return0;44}45}4647doublecount(doublebase,intnum)48{49doubleresult=base;50inti=0;51for(;i<num-1;i++)52{53result*=base;54}55returnresult;56}
1/****************************************2>FileName:test.c3>Author:xiaoxiaohui4>mail:1924224891@qq.com5>CreatedTime:2016年05月23日星期一22时37分14秒6****************************************/78910//首先要排除base为0的情况,而为0并且当规定返回0时,为了区分是返回值为0还是返回错误11//就要设置一个flog值。然后再区分指数为负值和正值的情况。然后算出结果返回。121314#include<stdio.h>1516intflog=0;17intpower(doublebase,intexponent)18{1920if(equal(base,0.0))//如果底数是0,则返回0.0,并且把flog置为非0值,21{//来检查当返回0时返回的是本身还是出错了。22flog=1;23return0.0;24}2526intexp=exponent;//使指数为正数27if(exponent<0)28{29exp=0-exponent;30}3132intresult=count(base,exp);33if(exponent<0)34{35result=1.0/result;36}3738returnresult;39}4041intequal(doublenum1,doublenum2)42{43if((num1-num2)>-0.0001&&(num1-num2)<0.0001)44{45return1;46}47else48{49return0;50}51}5253doublecount(doublebase,intnum)54{55if(num==0)56{57return1;58}5960if(num==1)61{62returnbase;63}6465doubleresult=count(base,num>>1);66result*=result;6768if(num&1)//bit最后一位为1肯定是奇数并且num除2只会得到偶数,所以69{//递归内部并不会执行这一行70result*=base;71}7273returnresult;74}757677//总结,当返回值为0时,要设置全局变量flog以区分返回值为0还是返回错误。78//浮点数比较时要比较一个区间。79//算n次方可以看成斐波那契数列的算法。80//判断是否为奇数可以按位与1
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。