栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

2021-10-05

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

2021-10-05

快速幂

问题:实现 pow(x, n) ,即计算 x 的 n 次幂函数(即,xn)。其中-231 <= n <= 2^31-1
**递归实现
算法思想:比如计算x的n次幂(n为偶数),可以先做x的n/2次幂,这样由二分的思想可以将算法复杂度降到log(n)

但同时还有很多细节需要考虑:
1)幂次为奇数如何处理,可以先算幂次的一半,然后再乘以底数
2)如果n为负数如何处理,可以将参数设置为-n,然后最后返回结果的倒数

`#include
using namespace std;

class Solution {
public:
    double quickMul(double x, long long N) {
        if (N == 0) {
            return 1.0;
        }
        double y = quickMul(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 ? quickMul(x, N) : 1.0 / quickMul(x, -N);
    }
};
int main(){
	int x,n;
	cin>>x>>n;
	Solution s; 
	cout< 

迭代实现
算法思想:将N进行二进制拆分,x的N次幂就可以写成x的每个二进制位次幂之积

#include
using namespace std;
double quickmul(int x,long long N){
	double ans=1.0;//1.0
	int x_contribute=x;
	while(N>0){
		if(N%2==1){
			ans*=x_contribute;
		} 
		x_contribute*=x_contribute;
		N/=2;
	}
	return ans;
}
double mypow(int x,int n){//double
	long long N=n;
	return N>0? quickmul(x,N): 1.0/quickmul(x,-N);//1.0
}

int main(){
	int x,n;
	cin>>x>>n;
	cout<
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/297576.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号