剑指offer|数值的整数次方
来源:互联网 发布:sql 注入登录绕过密码 编辑:程序博客网 时间:2024/05/29 07:52
题目描述
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
思路:
求次方很简单,一个循环连续相乘就可以了。
但是,题目肯定是没那么简单啦,还要考虑输入值的不同情况的处理。
首先考虑 指数exponent。它是一个整数,分为负整数,零和正整数这三种情况。
1. 正整数的时候正常处理就好。
2. 当指数为0的时候。因为除零外任意数的0次方为为1。零的0次方没有意义,所以输出0或1都可以。我是在牛客网刷的,要求是输出1。所以直接在代码的开头判断指数是否为0,如果是则直接输出1,结束函数。
3. 当指数为负数的时候。由于一个数的负指数等于这个数的指数的倒数。所以这时候需要先求指数的绝对值,然后正常计算。最后把结果取倒数。
然后考虑基数base。他是一个double类型的数。它也分为正负零三种情况。然而正负没有什么影响。主要是要判断是否为零。如果为零则直接返回0。这里还要考虑指数是否为负数,因为对0求倒数是错误的。
由于基数base是一个double类型的数,所以判断它是否为0的时候不能直接用==来判断。需要让它跟一个非常小的数进行比较。代码如下。
class Solution {public: double Power(double base, int exponent) { if(exponent==0) return 1; if(base<0.00001 && base >-0.00001) return 0; int exp=abs(exponent); double result=1; for(int i=0;i<exp;++i) result *=base; if(exponent < 0) result = 1.0/result; return result; }};
进阶:
由于基数的n次方可以表示成下面的形式,因此可以通过递归的形式来计算。
class Solution {public: double Power(double base, int exponent) { if(exponent==0) return 1; if(base<0.00001 && base >-0.00001) { if(exponent<0) { throw runtime_error("invalid input"); } return 0; } int unsignedExp=abs(exponent); double result=PowerUnsigned(base,unsignedExp); if(exponent<0) result= 1.0/result; return result; } double PowerUnsigned(double base,int exponent) { if(exponent==0) return 1; if(exponent ==1) return base; double result=PowerUnsigned(base,exponent>>1); result *=result; if(exponent &0x1 ==1) result *=base; return result; }};
参考资料
1.剑指offer 何海涛
1 0
- 剑指Offer之数值的整数次方
- 剑指offer:数值的整数次方
- 【剑指offer】数值的整数次方
- [剑指offer]Q11:数值的整数次方
- 【剑指offer】数值的整数次方
- 剑指Offer之数值的整数次方
- 《剑指offer》数值的整数次方
- 剑指offer--数值的整数次方
- 剑指Offer之 - 数值的整数次方
- 剑指offer-11 数值的整数次方
- 剑指offer 11 - 数值的整数次方
- 剑指Offer-数值的整数次方
- 剑指offer 数值的整数次方
- 《剑指offer》数值的整数次方
- 剑指offer—数值的整数次方
- 剑指Offer-11-数值的整数次方
- 【剑指offer】之数值的整数次方
- 剑指offer-数值的整数次方
- 设计模式:行为型模式
- 文章标题
- 常用的 android 设计模式
- 学习《Android3D游戏开发技术宝典:OpenGL.ES.2.0》二:着色器语言基础
- 飛飛(八十)(补)请构造String类的加、减运算(s1+s2将两个字符串的连接起来;s1-s2是将s1的尾部空格和s2的前导空格去除后的连接)
- 剑指offer|数值的整数次方
- yii url重写去掉index.php
- UI控件之ScrollView(滚动条)
- iOS之手机信号的查看与判断
- Linux环境下网络共享USB设备服务配置
- matlab绘图基础
- android使用keytools使用
- Android项目多处使用SO库,出现的问题
- jsp网页跳转小结