前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【剑指Offer】16. 数值的整数次方

【剑指Offer】16. 数值的整数次方

作者头像
瑞新
发布2020-12-07 14:23:26
2780
发布2020-12-07 14:23:26
举报

题目描述

给定一个 double 类型的浮点数 base 和 int 类型的整数 exponent,求 base 的 exponent 次方。

解题思路

下面的讨论中 x 代表 base,n 代表 exponent。

因为 (x\*x) n/2 可以通过递归求解,并且每次递归 n 都减小一半,因此整个算法的时间复杂度为 O(logN)。

函数API

代码语言:javascript
复制
public class Solution {
    public double Power(double base, int exponent) {
        return Math.pow(base, exponent);
  }
}

快速幂

指数用 二进制表示

在这里插入图片描述
在这里插入图片描述

long类型防止越界

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
代码语言:javascript
复制
class Solution {
    public double myPow(double x, int n) {
        // 快速幂(n用二进制表示,拆分二进制相加,合并逐个相乘)
        if(x == 0) return 0;

        long b = n; // 防止保存int越界 范围2*10的(自我计数法)

        double res = 1.0;
        if(b < 0) {
            b = -b; // 用long防止溢出
            x = 1 / x;
        }
        while(b > 0) {
            if((b & 1) == 1) res *= x; // 累乘 
            x *= x; // 2的次方
            b >>= 1;
        }
        return res;
    }
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-08-07 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题目描述
  • 解题思路
    • 函数API
      • 快速幂
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档