快速幂
1.递归
每次吧结果相乘
//递归快速幂
double myPow(double x, long long n) {
//x x2 x4 x8 x16*x
if(n >= 0){
return quickPow(x,n);
}else{
//n为负数情况
n=-n;
return 1.0/quickPow(x,n);
}
}
double quickPow(double x,long n){
if(n==0){
return 1;
}
double t=myPow(x,n/2);
if(n % 2 == 0){
return t*t;
}else{
return t*t*x;
}
}
2.迭代+位运算
//递推法
考虑吧n写成二进制,多项式推导之后发现
每次用x当前二进制位2的i次方
double myPow(double x, int n) {
double ans=1;
long N=n;
if(N<0){
N=-N;
x=1.0/x;
}
while(N){
if(N&1){
ans=ans*x;
}
//每次x值都会再*x 但是当二进制位为0时 不会和结果相乘
x=x*x;
N>>=1;
}
return ans;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律