Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >剑指offer:数值的整次数方

剑指offer:数值的整次数方

作者头像
帅地
发布于 2019-03-11 07:44:51
发布于 2019-03-11 07:44:51
50300
代码可运行
举报
文章被收录于专栏:苦逼的码农苦逼的码农
运行总次数:0
代码可运行

前言

本来是打算次条每天更新面试题和算法刷题的,加上头条一共要三篇文章,实在更不来,而且两篇都看的人也不多,所以我就算法刷题和面试题论着更新,更新的时候多更新几道。

题目描述

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

解答

方法1:暴力法

这道题就简单的方法就是暴力法了,就是让 base 乘以 exponent 次 base。

代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 1    public double Power(double base, int exponent) {
 2        // 任何数的 0 次方都是 1(0除外,不过题目并没有说 base=0时怎么处理)
 3        if (exponent == 0) {
 4            return 1;
 5        }
 6        double temp = base;
 7        int n = exponent;
 8        if (n < 0) {
 9            n = -n;
10        }
11        for (int i = 1; i < n; i++) {
12            base *= temp;
13        }
14        return exponent < 0 ? 1 / base : base;
15    }

方法2:位运算

我直接举个例子吧,例如 base = 2, exponent = 13,则 exponent 的二进制表示为 1101, 那么 2 的 13 次方可以拆解为:

2^1101 = 2^0001 * 2^0100 * 2^1000。

我们可以通过 & 1和 >>1 来逐位读取 1101,为1时将该位代表的乘数累乘到最终结果。

代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 1    public double Power(double base, int exponent) {
 2        if(exponent == 0)
 3            return 1.0;
 4        int n = exponent;
 5        if (n < 0) {
 6            n = -n;
 7        }
 8        double sum = 1;
 9        double temp = base;
10        while (n != 0) {
11            if ((n & 1) != 0) {
12                sum *= temp;
13            }
14            temp *= temp;
15            n = n >> 1;
16        }
17        return exponent < 0 ? 1 / sum : sum;
18  }

其实有很多题是可以利用位的异或来解决的,大家可以思考下平时遇到哪些题是用这种方法解决的,我后面会给出几道题,这些题都可以用异或位运算巧妙解决。发的另一道题也用到了位运算。

其实我是想跟大家说,做题的时候,有时候想想是否可以用位运算来解决。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-02-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 帅地玩编程 微信公众号,前往查看

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
剑指offer:二进制中1的个数
本来是打算次条每天更新面试题和算法刷题的,加上头条一共要三篇文章,实在更不来,而且两篇都看的人也不多,所以我就算法刷题和面试题论着更新,更新的时候多更新几道。
帅地
2019/03/11
3520
C++版 - 剑指Offer 面试题11:数的整数次方(Leetcode50. Pow(x, n))【C库函数pow模拟】题解
温馨提示:本技术博客的相关代码将会在github(https://github.com/yanglr)中同步更新,敬请star和fork...
Enjoy233
2019/03/05
1.1K0
C++版 - 剑指Offer 面试题11:数的整数次方(Leetcode50. Pow(x, n))【C库函数pow模拟】题解
数学题:查找,快速幂,二进制,剪绳子
各位小伙伴,又到周末啦~本周小白已经开始二刷《剑指offer》了,这次在LeetCode上面刷题,发现LeetCode上面的《剑指offer》和牛客上面的题目好像有一些差别。也提醒一下其他的小伙伴儿刷题的时候可以稍作留意啊!
鹏-程-万-里
2020/06/04
4790
【剑指Offer】10.4 变态跳台阶
一只青蛙一次可以跳上 1 级台阶,也可以跳上 2 级… 它也可以跳上 n 级。求该青蛙跳上一个 n 级的台阶总共有多少种跳法。
瑞新
2020/12/07
2120
剑指offer 16——数值的整数次方
实现函数double Power(double base, int exponent),求base的exponent次方。不得使用库函数,同时不需要考虑大数问题。
健程之道
2020/05/17
2900
LeetCode-面试题16-数值的整数次方
实现函数double Power(double base, int exponent),求base的exponent次方。不得使用库函数,同时不需要考虑大数问题。
benym
2022/07/14
2290
剑指Offer——编程题的Java实现
声明:我写这个的意图是我在看书的过程中,就我掌握的内容做一个笔记,没有抄袭的意图。再次说明一下,我找工作的过程中并不顺利,没有像那些牛人们拿到一大把的Offer,我只是希望通过我自己的努力,不断提高自己。想要真正掌握这些还是得买本书好好读一下。 注:还没有完结,先放出来,不断更新 1、面试题3:二维数组中的查找 题目大致为:     一个二维数组,每一行按照从左到右递增,每一列按照从上到下递增,查找数组中是否存在某个数。如数组: 1  2  8    9 2  4  9   12 4  7  10  13
felixzhao
2018/03/16
2.2K0
剑指Offer——编程题的Java实现
[剑指offer] 数值的整数次方 [剑指offer] 数值的整数次方
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
尾尾部落
2018/09/04
8680
[剑指offer] 数值的整数次方
		
			[剑指offer] 数值的整数次方
牛客刷题篇——剑指offer (第二期)
 💟💟前言 🥇作者简介:友友们大家好,我是你们的小王同学😗😗 🥈个人主页:小王同学🚗 🥉 系列专栏:牛客刷题专栏📖 📑 推荐一款非常火的面试、刷题神器👉 牛客刷题 今天给大家带来的刷题系列是:剑指offer 第二期  里面有非常多的题库 跟面经知识 真的非常良心了!! 目录 JZ12 矩阵中的路径🥣 题目描述🥣 解题思路🥣 代码详解🥣 过辣~ JZ16 数值的整数次方🥣 题目描述🥣 解题思路🥣 代码详解🥣 JZ40 最小的K个数🥣 题目描述🥣 解题思路🥣 代码详解🥣 JZ12 矩阵中的路
王同学要努力
2022/12/21
3670
牛客刷题篇——剑指offer (第二期)
【算法技巧】位运算指南
位算法的效率有多快我就不说,不信你可以去用 10 亿个数据模拟一下,今天给大家讲一讲位运算的一些经典例子。不过,最重要的不是看懂了这些例子就好,而是要在以后多去运用位运算这些技巧,当然,采用位运算,也是可以装逼的,不信,你往下看。我会从最简单的讲起,一道比一道难度递增,不过居然是讲技巧,那么也不会太难,相信你分分钟看懂。
Java团长
2019/05/28
5880
剑指Offer(十二)--数值的整数次方
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。保证base和exponent不同时为0。
秦怀杂货店
2022/02/15
4150
每天一道剑指offer-牛客网数值的整数次方
今天的题目 每天的题目见github(看最新的日期): https://github.com/gzc426 具体的题目可以去牛客网对应专题去找。
乔戈里
2019/09/17
3690
每天一道剑指offer-牛客网数值的整数次方
剑指offer(01-15题)优化题解
思路: 选定一个维度(行或列)先找到需要查找的元素所在的行(列),再从该行(列)找到该元素的该元素具体的列(行)位置。复杂度O(n)。
bigsai
2020/02/19
4990
剑指offer | 面试题13:数值的整数次方
实现 pow(x, n),即计算 x 的 n 次幂函数(即, )。不得使用库函数,同时不需要考虑大数问题。
千羽
2021/12/29
2930
剑指offer | 面试题13:数值的整数次方
LeetCode-191.位1的个数(java)
        刚刷到这道题的时候,我在想,这一看又是一道二进制题,该不会也跟上一期190.颠倒二进制法一道题型吧?我抱着怀疑的慢慢读题看示例,果不其然,还真是,只不过这道题是要你进行 为'1' 的进行个数统计。很简单吧?
bug菌
2023/05/27
1770
LeetCode-191.位1的个数(java)
一道看似简单的面试题
这样看似简单的一个面试题, 实际牵出了很多基础知识,本章在为大家补习基础知识的情况下来解答这道题。先亮出答案
CrazyCodes
2018/09/18
5460
剑指offer--数值的整数次方
题目描述 给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
AI那点小事
2020/04/20
3100
0x01|算法竞赛进阶指南 - 位运算3题详解
算法进阶指南看了开头一部分,个人感觉讲解的比较透彻,于是打算写一些个人的读书笔记,主要是做题后做一个总结,不求快,但求能一点点讲清楚每个知识点。这一节来看看第一章的位运算部分。
ACM算法日常
2020/12/31
6380
0x01|算法竞赛进阶指南 - 位运算3题详解
LeetCode通关:求次数有妙招,位运算三连
大家好,我是刷题困难户老三,这一节我们来刷几道很有意思的求次数问题,它们都有同一类非常巧妙的解法。
三分恶
2021/08/06
3660
【剑指Offer】16. 数值的整数次方
给定一个 double 类型的浮点数 base 和 int 类型的整数 exponent,求 base 的 exponent 次方。
瑞新
2020/12/07
3050
推荐阅读
相关推荐
剑指offer:二进制中1的个数
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验