【剑指 Offer】 16.数值的整数次方
【题目】
实现 pow(x, n) ,即计算 x 的 n 次幂函数(即,xn)。不得使用库函数,同时不需要考虑大数问题。
示例 1:
输入:x = 2.00000, n = 10
输出:1024.00000
示例 2:
输入:x = 2.10000, n = 3
输出:9.26100
示例 3:
输入:x = 2.00000, n = -2
输出:0.25000
解释:2-2 = 1/22 = 1/4 = 0.25
提示:
-100.0 < x < 100.0
-231 <= n <= 231-1
-104 <= xn <= 104
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/shu-zhi-de-zheng-shu-ci-fang-lcof
【思想】
通过快速幂运算,比如59,我们就将其变成(52)4 x 5
如果幂次数是奇数,就像上面一样,将余数乘到后面
如果是偶数,就直接转换。
然后可以将乘转换为位运算
转化为位运算:
向下整除 n//2 等价于 右移一位 n>>1 ;
取余数 n%2 等价于 判断二进制最右一位值 n&1 ;
【步骤】
1.底数x=0时,返回0
2.将结果res赋为1
3.如果幂数n小于0,将幂数n转为-n,将底数转为x=1/x
4.循环计算,当n=0结束
4.1 n&1=1时,表示当前幂次是奇数,res乘当前x底数
4.2 x=x2
4.3 n//2即n>>=1
5.返回res
【代码】
class Solution { public double myPow(double x, int n) { double res = 1.0; long b = n; if(x==0) return 0; if(b<0){ x = 1/x; b = -b; } while(b>0){ if((b&1)==1){ res *=x; } x*=x; b>>=1; } return res; } }
分类:
剑指offer系列
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!