Leetcode50. Pow(x, n)

50. Pow(x, n)

1、原题

Implement pow(xn).

Subscribe to see which companies asked this question.

2、题意解析
这道题的题意很是简单,就是让我们实现pow(x,n)这个函数。
一开始,我想到的是最简单的循环累乘,在这里我们会发现这样超时。因此要改变我们的思路。
            我后面的思路是这样的:既然我们不能够使用正常的循环累乘;但是我们可以使用位运算,将一个大的自乘同过位数运算分解为一个简单的乘法。具体内容请看算法。

3、代码
double myPow(double x, int n) {
        double res = 1;
        //主要是int的负整数绝对值大于正数部分。
	    unsigned int p;
	    //当n为负数时,对数据进行相应的处理
    	if (n < 0) {
    		p = -n;
    		x = 1 / x;
    	} else {
    		p = n;
    	}
    	
    	//位循环
    	while (p) {
    	    //当此位为1时,结果乘以当前的x值
    		if (p & 1) {
    			res *= x;
    		}
    		//每进行一次位移,x都^2一次。
    		x *= x;
    		//将p向左移一位
    		p >>= 1;
    	}
    	
    	return res; 
    }
	

	

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值