【剑指offer】数值的整数次方
来源:互联网 发布:方维社区o2o系统 源码 编辑:程序博客网 时间:2024/06/10 09:09
题目描述:
实现函数double Power(double base, int exponent),求base的exponent次方。不得使用库函数,同时不需要考虑大数问题。
分析描述:
对于实现一个函数,首先要做的就是全面考虑它的参数的全部可能。对于此题中的数值函数,应该考虑的参数有整数、0、负数、浮点型、整型、是不是大数问题等。
如果exponent是负数,则所求的幂函数中,base不能是0。否则就会出现0做除数的问题,对于这种错误,可以通过指定标志的方法给出。如果exponent是负数,应该求base的(-exponent)的幂数的倒数。另外,如果base为0.0,exponent也为0时,没有意义,
int flag = 0;//标志位,如果base和exponent都为0时,设置该位double power(double base, int exponent){if(equal(base, 0.0) && exponent < 0){/*此处不能简单的用base == 0.0来比较*/flag = 1;return 0.0;}unsigned int absexponent = (unsigned int)exponent;if(exponent < 0)absexponent = (unsigned int)(-exponent);/*如果exponent小于零,求它的绝对值*/double result = PowerWithUnsignedExponent(base, absexponent);if(exponent < 0)result = 1.0 / result;return result;}double PowerWithUnsignedExponent(double base, unsigned int absexponent){double result = 1.0;int i;for(i = 1; i <= absexponent; ++i)result *= base;return result;}int equal(double num1, double num2){if((num1 - num2 > -0.0000001) /*比较两个浮点数是否相等的方法*/&&(num1 - num2) < 0.0000001)return 1;
上面的方法虽然能解决问题,但并不高效。如果exponent比较大,可以用另外一种方法解决:
double PowerWithUnsignedExponent(double base, unsigned int absexponent){if(absexponent == 0)return 1;if(absexponent == 1)return base;double result = PowerWithUnsignedExponent(base, absexponent >> 1);result * = result;if(absexponent & 0x1 == 1)result *= base;return result;}
总结:上面的第一段程序用到了一种错误处理方法:全局变量法。还有另外两种处务处理方法:返回值法、异常处理法等。
0 1
- 剑指Offer之数值的整数次方
- 剑指offer:数值的整数次方
- 【剑指offer】数值的整数次方
- [剑指offer]Q11:数值的整数次方
- 【剑指offer】数值的整数次方
- 剑指Offer之数值的整数次方
- 《剑指offer》数值的整数次方
- 剑指offer--数值的整数次方
- 剑指Offer之 - 数值的整数次方
- 剑指offer-11 数值的整数次方
- 剑指offer 11 - 数值的整数次方
- 剑指Offer-数值的整数次方
- 剑指offer 数值的整数次方
- 《剑指offer》数值的整数次方
- 剑指offer—数值的整数次方
- 剑指Offer-11-数值的整数次方
- 【剑指offer】之数值的整数次方
- 剑指offer-数值的整数次方
- 禁止win7安装更新后自动重启
- Linux关机命令详解 四个常用的linux关机命令
- 通过反射获取泛型<T>的class
- Android 线程刷新界面
- code review sum
- 【剑指offer】数值的整数次方
- 手机找回--两点间的距离
- Python 对新浪微博的元素 (Word, Screen Name)的词汇多样性分析
- 重载运算符+
- 传值
- 摘记
- centos 5 yum安装与配置vsFTPd FTP服务器
- 初级数据持久化
- 【OpenCV学习笔记】【异常处理】一(The Matrix is not continuous, thus its number of rows can not be changed)