《剑指Offer》学习笔记——数值的整数次方
2016-04-06 21:24
447 查看
题目描述:
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
分析:我们知道,当指数为负值时,可以先对指数求绝对值,然后算出次方后再取倒数。既然是求倒数,我们就会想到如果对0取倒数怎么办?当底数是0且指数为负时,如果不做特殊处理,就会出现对0取倒数从而导致程序运行错误。那么如果告诉函数的调用者出现了这种错误呢?有三种方法:返回值、全局处理和异常。
最后需要指出的是,由于0的0次方在数学上没有意义,因此无论输出0还是1都是可以接受的,这需要和面试官说清楚,表明自己已经考虑这个边界值了。
下面是实现代码:
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
分析:我们知道,当指数为负值时,可以先对指数求绝对值,然后算出次方后再取倒数。既然是求倒数,我们就会想到如果对0取倒数怎么办?当底数是0且指数为负时,如果不做特殊处理,就会出现对0取倒数从而导致程序运行错误。那么如果告诉函数的调用者出现了这种错误呢?有三种方法:返回值、全局处理和异常。
最后需要指出的是,由于0的0次方在数学上没有意义,因此无论输出0还是1都是可以接受的,这需要和面试官说清楚,表明自己已经考虑这个边界值了。
下面是实现代码:
class Solution { public: bool g_InvalidInput=false; double PowerWithUnsignedExponent(double base, unsigned int exponent) { if(exponent==0) return 1; if(exponent==1) return base; double result=Power(base,exponent>>1); result*=result;//exponent为偶数次时 if((exponent&0x1)==1)//exponent为奇数次时 result*=base; return result; } double Power(double base,int exponent) { if(base>-0.0000001&&base<0.0000001&&exponent<0)//底数为0且指数为负数的输入 { g_InvalidInput=true; return 0.0; } unsigned int AbsExponent=(unsigned int)exponent; if(exponent<0) AbsExponent=(unsigned int)(-exponent); double result=PowerWithUnsignedExponent(base,AbsExponent); if(exponent<0)//指数为负数时 { result=1.0/result; } return result;//否则直接返回计算结果 } };
相关文章推荐
- 输入两个链表,找出它们的第一个公共结点
- jQuery ——callback和Chaining
- AngularJS 最常用的八种功能
- 登陆界面设计,如果用户名密码为空javascript提醒
- 如何给caffe添加新的layer ?
- bootstrapTable
- 前端调错(一)---ajax返回数据成功,却进入error方法
- jQuery UI之手风琴
- JSP小练习(一)
- 024 Swap Nodes in Pairs
- 【新人笔记16.04.06】JS--加载顺序之谜
- 前端开发曾经遇到的那些小困惑
- CSS利用padding和margin正负相消实现多列等高
- JS使用正则+JSON对HTML模板进行数据填充
- javascript高级程序设计 读书笔记1
- javascript中的this用法
- The first day of HTML
- react native android使用react-native-tab-navigator来做底部导航tabbar(2)一个坑:navigator
- ubuntu 14.04 anaconda2安装后caffe编译错误
- CSS,font-family:中文字体的英文名称