剑指offer——数值的整数次方
来源:互联网 发布:ubuntu jdk 安装 编辑:程序博客网 时间:2024/06/05 18:42
1. 题目描述
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
2. 题目分析
最首先想到的是暴力破解的方法,即
float ans = 1.0;for(int i = 1;i<=n;i++){ ans *= base;}
但是貌似暴力破解的方式看起来不太文明。所以转念就想到了递归。举个例子说明:
Power(2,4)=16=Power(2,2)*Power(2,2)=[Power(2,1)xPower(2,1)]x[Power(2,1)xPower(2,1)]=[2x2]x[2x2]=16
那么就要考虑两种情况了,一种就是exponent是2的整数倍,另一种是exponent不是2的整数倍。情况一,可以使用例子中的递归方式;情况二,可以先对exponent-1使用例子中的递归方式,然后再给结果乘上一个base即可。
那么就要考虑两种情况,即递归的初始值:exponent=0和exponent=1时Power的取值。
另外,该题目还要考虑到当exponent<0的情况。数学上,此时
Power(base,exponent)=1/Power(base,-exponent)
那么这里需要注意的一个问题是,在除法计算时,如何保留小数的精准度。
C++中,要计算2个double类型相除结果,如61/387,应得到0.15xxxxx,直接用“/”计算结果却为0.00000。原因是“/” 运算会自动将结果四舍五入,所以要得到精确的除法结果,只需将其中一个数转为float:(float)61/387;
分析了这么多之后,就可以快快乐乐的写程序了。
class Solution {public: double Power(double base, int exponent) { //定义一个double变量来保存最终结果 double ans = 0.0; //当exponent < 0的时候,取倒数 if (exponent < 0) { exponent = 0 - exponent; return float(1.0)/Power(base,exponent); } if (exponent == 0) return 1; if (exponent == 1) return base; //对所求的值使用递归计算 while(exponent > 1) { if (exponent % 2 == 0) { exponent = exponent/2; ans = Power(base,exponent) * Power(base,exponent); return ans; } else { exponent = (exponent-1)/2; ans = Power(base,exponent) * Power(base,exponent) * base; return ans; } } return ans; }};
阅读全文
0 0
- 剑指offer—数值的整数次方
- 剑指offer—数值的整数次方
- 剑指offer—数值的整数次方
- 剑指offer——数值的整数次方
- 《剑指offer》——数值的整数次方
- 《剑指Offer》学习笔记——数值的整数次方
- 剑指offer——数值的整数次方
- 数值的整数次方——剑指offer
- 剑指offer——数值的整数次方
- 剑指offer——数值的整数次方
- 剑指Offer——(12)数值的整数次方
- 剑指offer——数值的整数次方
- 剑指Offer——数值的整数次方
- 剑指offer——12.数值的整数次方
- 剑指offer——数值的整数次方
- 剑指offer(12)—数值的整数次方
- 剑指Offer之数值的整数次方
- 剑指offer:数值的整数次方
- B
- 简易手动部署多节点的Openstack(L版)——柒(创建网络,启动实例)
- kafka--producer&consumer
- hive-组内排序取前100
- 2017.7.25 MQTT相关使能与mdns 问题处理
- 剑指offer——数值的整数次方
- Face Faster RCNN安装步骤和遇到的问题
- Java初学者的学习路线建议
- vagrant中Vagrantfile配置
- python36 c++调用python
- c++的初始化列表
- C#基础
- UVA1640 数位统计
- JQuery_九大选择器