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程序算法设计的学习有一定的借鉴价值。
相关文章
- C语言学习——函数(含递归)
- C语言如何计算数组的长度
- 欧几里得扩展模板--------------------------C语言——菜鸟级
- 后缀数组 模板------------------------------C语言——菜鸟级
- C语言中数组长度的计算详解
- C语言数据类型分类
- C语言frexp()函数:提取浮点数的尾数和指数部分
- 数据库深度探索C语言与Redis数据库(c语言redis)
- 开发Linux下C语言软件的指南(linuxc软件开发)
- C语言编程实现Linux下的时间间隔计算(linuxc时间间隔)
- 使用C语言操作MySQL查询出最佳结果(c mysql 查询结果)
- MySQL嵌套事务与C语言编程技术实现(c mysql嵌套事务)
- C语言实现socket简单通信实例