剑指Offer:数值的整数次方

剑指Offer:数值的整数次方

问题描述:
实现函数double Power(double base, int exponent),求base的exponent次方。不得使用库函数,同时不需要考虑大数问题。

解题思路:

  1. 判断x的n次方为正或负数;
  2. 若为负数直接转换成int类型会超出范围,直接定义一个long型,进行转换;
  3. 当n的最低位存在 ,则进行一次乘积;
  4. 否则每次平方的关系进行扩大,(二进制当中每位相差平方数)
class Solution {
public:
    double myPow(double x, int n) 
    {
        double num=1;
        long N=n;
        if (N < 0)
        {
            N=-N;
        }
        while (N)
        {
            if (N&1)
                num=num*x;	//n的最低位存在,最后再乘1个x;
            x *= x;         //每次都是x*x,   
            N >>= 1;		//N右移一位
        }
        return n > 0 ? num:1/num;
    }
};
posted @ 2020-03-10 21:27  Ternence_zq  阅读(93)  评论(0编辑  收藏  举报