x→x^2→x^4→x^9→x^19→x^38→x^77
根据递归计算的结果,如果 n 为偶数,那么 xn=y2x^n = y^2xn=y2;如果 n为奇数,那么 xn=y2×xx^n = y^2 \times xxn=y2×x;
递归的边界为 n=0,任意数的 0次方均为 1。
#include <iostream>
using namespace std;
double quickPow(double x, long long n)
{
if (n == 0)
return 1.0;
double y = quickPow(x, n / 2); //分治
return n % 2 == 0 ? y * y : y * y * x; //判断奇偶
}
double myPow(double x, int n)
{
long long N = n;
return (n > 0) ? quickPow(x, N) : 1.0 / quickPow(x, -N); //判断幂正数还是负数
}
int main(int argc, char const *argv[])
{
int n;
double x;
cout << "请输入底数和指数:";
cin >> x >> n;
cout << myPow(x, n);
return 0;
}
快速幂算法实现
最新推荐文章于 2025-12-07 21:20:15 发布
该博客介绍了如何使用递归和分治策略实现快速幂运算。通过示例代码展示了当指数n为偶数或奇数时如何计算xn,并特别处理了n为0的情况。此外,还提供了一个C++实现的快速求幂函数,能够处理正负指数的情况。
710

被折叠的 条评论
为什么被折叠?



