当前位置:网站首页>leetcode 16. 数值的整数次方(快速幂+递归/迭代)
leetcode 16. 数值的整数次方(快速幂+递归/迭代)
2022-08-03 20:06:00 【会编程的露娜】
实现 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
思路:
快速幂+递归
class Solution {
public:
double myQuick(double x,long long k){
if(k==0)
return 1.0;
double y=myQuick(x,k/2);
return k%2==0 ? y*y : y*y*x;
}
double myPow(double x, int n) {
long long N=n;
return N>0 ? myQuick(x,N) : 1.0/myQuick(x,-N);
}
};
快速幂+迭代:
class Solution {
public:
double myPow(double x, int n) {
if(n==0)
return 1.0;
if(x==0)
return 0;
double ans=1.0;
long long b=n; //因为int是正数时补码为本身,如果是负数补码,改变符号之后需要加1,如果传进来的是(-2)的32次方,去反之后就会超出int,所以要用long long来扩大类型
if(n<0){
x=1/x; //这里是直接先取倒数,再计算倒数的n次方
b=-b;
}
while(b>0){
if(b&1==1) //如果b最后一位为1,就乘在最后的结果中,是0的话不用算到结果里
ans*=x;
x*=x;
b>>=1; //右移运算符可以看做删除最后一位,把低位最后一个移除,高位正数补0,负数补1
}
return ans;
}
};
左移和右移运算具体内容可以看:左移和右移的算法
边栏推荐
猜你喜欢
高效目标检测:动态候选较大程度提升检测精度(附论文下载)
一种能有效缓解环境噪声对音频质量干扰的方案
详解AST抽象语法树
从文本匹配到语义相关——新闻相似度计算的一般思路
【HiFlow】经常忘记签到怎么办?使用腾讯云场景连接器每天提醒你。
宁德时代2号人物黄世霖辞任副董事长:身价1370亿
信使mRNA甲基化偶联3-甲基胞嘧啶(m3C)|mRNA-m3C
后台图库上传功能
[email protected] 610/[email protected] 594/Alexa 56"/>
染料修饰核酸RNA|[email protected] 610/[email protected] 594/Alexa 56
算法--交错字符串(Kotlin)
随机推荐
Detailed AST abstract syntax tree
盲埋孔PCB叠孔设计的利与弊
tRNA甲基化偶联3-甲基胞嘧啶(m3C)|tRNA-m3C (3-methylcy- tidine)
tensorflow-gpu2.4.1安装配置详细步骤
async 和 await 原来这么简单
CSDN帐号管理规范
2022 CCF中国开源大会会议通知(第三轮)
危化企业双重预防机制数字化建设进入全面实施阶段
JMeter笔记5 |Badboy使用和录制
利用 rpush 和 blpop 实现 Redis 消息队列
百利药业IPO过会:扣非后年亏1.5亿 奥博资本是股东
CLIP论文解读
小马智行起诉擎天智卡:索赔6000万 彭军称要斗争到底
【leetcode】剑指 Offer II 008. 和大于等于 target 的最短子数组(滑动窗口,双指针)
力扣203-移除链表元素——链表
List类的超详细解析!(超2w+字)
php根据两点经纬度计算距离
LeetCode 622. 设计循环队列
Benchmarking Lane-changing Decision-making for Deep Reinforcement Learning
微导纳米IPO过会:年营收4.28亿 君联与高瓴是股东