首页 > 其他 > 详细

剑指Offer16 数值的整数次方

时间:2020-07-03 12:28:50      阅读:42      评论:0      收藏:0      [点我收藏+]

实现函数double Power(double base, int exponent),求base的exponent次方。不得使用库函数,同时不需要考虑大数问题。

 

示例 1:

输入: 2.00000, 10
输出: 1024.00000
示例 2:

输入: 2.10000, 3
输出: 9.26100
示例 3:

输入: 2.00000, -2
输出: 0.25000
解释: 2-2 = 1/22 = 1/4 = 0.25
 

说明:

-100.0 < x < 100.0
n 是 32 位有符号整数,其数值范围是 [−231, 231 − 1] 。

 

题目不新鲜,但是要注意几个点:

1.注意溢出,这里书上没有考虑INT_MIN取反溢出的问题

2.尽量使用位运算,效率更高

3.使用幂计算,效率为O(logn)

 1 class Solution {
 2 public:
 3     double myPow(double x, int n) {
 4         if(!x )
 5             throw ("x equal to zero error");
 6         long long absn=n;
 7         if(n<0)
 8             absn=-absn;
 9         double result=power(x,absn);
10         if(n<0)
11             return 1.0/result;
12         return result;
13     }
14 
15     double power(double base, long long exponent)
16     {
17         if(!exponent)
18             return 1;
19         if(exponent==1)
20             return base;
21         double ret=power(base, exponent>>1);
22         ret*=ret;
23         if(exponent&1==1)
24             ret*=base;
25         return ret;
26     }
27 };

 

剑指Offer16 数值的整数次方

原文:https://www.cnblogs.com/rookiez/p/13229285.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!