offer题11 数值的整数次方&判断浮点型是否相等&降低求n次方的时间复杂度&3种错误处理方式
2016-04-13 00:34
721 查看
数值的整数次方(面试题11)
判断浮点型是否相等
降低求n次方的时间复杂度
3种错误处理方式
1.数值的整数次方(面试题11)
题目:实现函数double Power(double base,int exponent),求base的exponent次方。不得使用库函数,同时不需要考虑大数问题
分析思路:
当base≠0时
exponent ≥0 可以直接Power
exponent <0 1.0/Power(-exponent)
当base=0时,
exponent ≥0 可以直接Power,但都是0;特别的:0的0次方无意义,本方法返回1.0
exponent <0 错误输入,有3种错误处理方式,要和面试官商量挑合适
最后就是考虑:判断浮点型是否相等 和
降低求n次方的时间复杂度
2.判断浮点型是否相等
判断浮点型是否相等要注意精度设置!跟整数不一样哦,很容易一时忽略的!
3.[b]降低求n次方的时间复杂度[/b]
求方函数有如下公式让效率更高
要优化就把细节都做好:用>>1代替÷2,用&0x1代替%2判断奇偶,这两个都是offer题10 位运算中提过的
4.三种错误处理方式
返回值:优点:是和系统API一致;缺点:不能方便的使用计算结果
全局变量:优点:能够方便的使用计算结果;缺点:用户可能会忘记检查全局变量
抛出异常:优点:可以为不同的错误定义不同的异常类型,逻辑清晰(try……catch……);缺点:有些语言不支持异常,抛出异常时对性能有负面影响
前面10题我都是用返回值和抛出异常,这道题试试我不太习惯用的全局变量
测试用例:底数和指数分别为正、负、0。
判断浮点型是否相等
降低求n次方的时间复杂度
3种错误处理方式
1.数值的整数次方(面试题11)
题目:实现函数double Power(double base,int exponent),求base的exponent次方。不得使用库函数,同时不需要考虑大数问题
分析思路:
当base≠0时
exponent ≥0 可以直接Power
exponent <0 1.0/Power(-exponent)
当base=0时,
exponent ≥0 可以直接Power,但都是0;特别的:0的0次方无意义,本方法返回1.0
exponent <0 错误输入,有3种错误处理方式,要和面试官商量挑合适
最后就是考虑:判断浮点型是否相等 和
降低求n次方的时间复杂度
2.判断浮点型是否相等
判断浮点型是否相等要注意精度设置!跟整数不一样哦,很容易一时忽略的!
3.[b]降低求n次方的时间复杂度[/b]
求方函数有如下公式让效率更高
要优化就把细节都做好:用>>1代替÷2,用&0x1代替%2判断奇偶,这两个都是offer题10 位运算中提过的
4.三种错误处理方式
返回值:优点:是和系统API一致;缺点:不能方便的使用计算结果
全局变量:优点:能够方便的使用计算结果;缺点:用户可能会忘记检查全局变量
抛出异常:优点:可以为不同的错误定义不同的异常类型,逻辑清晰(try……catch……);缺点:有些语言不支持异常,抛出异常时对性能有负面影响
前面10题我都是用返回值和抛出异常,这道题试试我不太习惯用的全局变量
#include<iostream> using namespace std; bool g_InvalidInput = false; bool DoubleEqualZero(double num1,double num2) { if((num1-num2)>-10e-8 && (num1-num2)<10e-8) return true; else return false; } double PowerWithUnsignedExponent(double base,int exponent) { double result = 1.0; for(int i=1;i<=exponent;++i) result *= base; return result; } double PowerWithUnsignedExponentFastly(double base,int exponent) { if(exponent == 0) return 1.0; if(exponent == 1) return base; //若exponent是奇数,减1再除以2和直接除以2结果一样,因为是整形 double result = PowerWithUnsignedExponentFastly(base,exponent>>1); result *= result; if(exponent & 0x1) result *= base; return result; } double Power(double base,int exponent) { g_InvalidInput = false; if(DoubleEqualZero(base,0.0) && exponent<0) { g_InvalidInput = true; return 0.0; } unsigned AbsExponent = (unsigned)exponent; if(exponent < 0) AbsExponent = (unsigned)(-exponent); double result = PowerWithUnsignedExponentFastly(base,AbsExponent); if(exponent < 0) result = 1.0/result; return result; } int main() { cout<<"0,0:"<<Power(0,0)<<endl; cout<<"2,3:"<<Power(2,3)<<endl; cout<<"2,-3:"<<Power(2,-3)<<endl; cout<<"-2,-3:"<<Power(-2,-3)<<endl; cout<<"-2,0:"<<Power(-2,0)<<endl; if(g_InvalidInput) cout<<"0,-2:"<<Power(0,-2)<<endl; else cout<<"0,-2:"<<"Error input"<<endl; return 0; }
测试用例:底数和指数分别为正、负、0。
相关文章推荐
- 网页五--html插入表格
- 关于js封装框架类库之DOM操作模块(一)
- 深入理解CSS径向渐变radial-gradient
- React问题总结与归纳
- JQuery攻略读书笔记---第2章 数组
- JQuery 两种方法解决刚创建的元素遍历不到的问题
- Angular.js与Bootstrap相结合实现手风琴菜单代码
- 两种方法解决javascript url post 特殊字符转义 + & #
- jquery跟随屏幕滚动效果的实现代码
- jQuery操作属性和样式详解
- JS中的eval 为什么加括号
- 原生js编写autoComplete插件
- Seajs 简易文档 提供简单、极致的模块化开发体验
- 前端新人该如何入门和提高
- angularjs ng-model不能实现双向绑定
- 重启Hadoop集群时no namenode to stop的异常
- 关于react native android navigationBar的隐藏问题
- 事件冒泡
- HTML嵌套表格样式
- js 模仿 F5