剑指offer——面试题11:数值的整数次方
来源:互联网 发布:苹果mac输入法设置 编辑:程序博客网 时间:2024/06/18 07:57
题目:给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方
代码:
class Solution {public: bool g_InvalidInput = false; // 采用全局变量来标识是否出错 bool equal(double num1,double num2) // { if(fabs(num1 - num2) < 0.000001) return true; else return false; } int PowerResult(double base, unsigned int exponent) { double result = 1.0; for(int i = 0;i<exponent;++i) { result *= base; } return result; } double Power(double base, int exponent) { g_InvalidInput = false; if(equal(base,0.0) && exponent < 0) { g_InvalidInput = true; return 0.0; } unsigned int absExponent = (unsigned int)exponent; if(exponent < 0) absExponent = (unsigned int)(-exponent); //int result = PowerResult(base,absExponent); double result = PowerResult(base,absExponent); if(exponent < 0) result = 1.0/result; return result; }};
分析:
(1)、如果不考虑全面,很容易几句话就搞定,即一个 for () 循环即可。但是,没有考虑如果输入的是零和负数怎么办?
(2)、当底数(base)为0,且指数为负数的时候,如果不做特殊处理,就会出现对 0 求倒数而导致程序错误。告诉程序的调用者出现了错误有三种方法:返回值、全局代码和异常。本程序中,设置了一个全局变量 g_InvalidInput ,如果出错,这个返回值会被设置为 true
(3)、判断底数 base 是不是等于 0 的时候,不能直接写 base == 0,因为计算机在表示小数时,包括 float 和 double 类型,都有误差,不能直接用等于号判断。判断两个小数是否相等,只需要判断它们之间的差的绝对值是否在一个很小的范围内即可。
(4)、还有一个更好的处理方法,能使程序的效率更高。见 P93页
阅读全文
2 0
- [剑指offer][面试题11]数值的整数次方
- 【剑指offer】面试题11:数值的整数次方
- 剑指offer 面试题11 数值的整数次方
- 剑指Offer:面试题11 数值的整数次方
- 《剑指Offer》面试题11:数值的整数次方
- 【剑指Offer学习】【面试题11 :数值的整数次方】
- 剑指offer-面试题11:数值的整数次方
- 剑指offer之面试题11:数值的整数次方
- 剑指offer----面试题11:数值的整数次方
- 剑指offer之面试题11数值的整数次方
- 剑指Offer--面试题11 数值的整数次方
- 剑指Offer----面试题11:数值的整数次方
- 剑指offer-面试题11:数值的整数次方
- 剑指offer面试题11:数值的整数次方
- 剑指offer--面试题11: 数值的整数次方
- 剑指Offer之面试题11:数值的整数次方
- 剑指offer-面试题11-数值的整数次方
- 剑指Offer系列-面试题11:数值的整数次方
- Pi Dashboard:给你的派装一个仪表盘
- css添加数据
- hdu 2157 (矩阵快速幂)
- AC自动机的讲解 包括借鉴的博客与视频
- C++ sscanf函数用法
- 剑指offer——面试题11:数值的整数次方
- RXJava & Retrofit
- HashMap和Hashtable的区别
- 继承控件
- Who's Aunt Zhang HDU
- 主机通过sftp传输文件到某台服务器ubuntu虚拟机出现:open for write: permission denied
- Retrofit+Rxjava简单的网络请求
- 机器学习-python通过序列最小优化算法(SMO)方法编写支持向量机(SVM)
- 装饰模式