当前位置:网站首页>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;
}
};
左移和右移运算具体内容可以看:左移和右移的算法
边栏推荐
- 百利药业IPO过会:扣非后年亏1.5亿 奥博资本是股东
- 基础软件与开发语言开源论坛| ChinaOSC
- tRNA-m5C转运RNA(tRNA)修饰5-甲基胞嘧啶(m5C)|tRNA修饰m1Am2A (2-methyladenosine)
- 单调栈及其应用
- 一种能有效缓解环境噪声对音频质量干扰的方案
- 不知道这4种缓存模式,敢说懂缓存吗?
- JS 内置构造函数 扩展 prototype 继承 借用构造函数 组合式 原型式creat 寄生式 寄生组合式 call apply instanceof
- 友宏医疗与Actxa签署Pre-M Diabetes TM 战略合作协议
- MySQL Basics
- 从文本匹配到语义相关——新闻相似度计算的一般思路
猜你喜欢
随机推荐
【STM32】标准库-自定义BootLoader
glide set gif start stop
【leetcode】剑指 Offer II 007. 数组中和为 0 的三个数(双指针)
List类的超详细解析!(超2w+字)
花 30 美金请 AI 画家弄了个 logo,网友:画得非常好,下次别画了!
JWT详解
xss.haozi练习通关详解
极验深知v2分析
Anaconda virtual environment migration
ThreadLocal详解
JMeter笔记5 |Badboy使用和录制
Kubernetes资源编排系列之三: Kustomize篇 作者 艄公(杨京华) 雪尧(郭耀星)
1161 最大层内元素和——Leetcode天天刷【BFS】(2022.7.31)
node版本切换工具NVM以及npm源管理器nrm
【飞控开发高级教程3】疯壳·开源编队无人机-定高、定点、悬停
ES6简介及let、var、const区别
【leetcode】剑指 Offer II 009. 乘积小于 K 的子数组(滑动窗口、双指针)
2022 年值得尝试的 7 个 MQTT 客户端工具
Internet Download Manager简介及下载安装包,IDM序列号注册问题解决方法
C51 存储类型与存储模式









