数值的整数次方

时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M 

题目描述

给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
保证base和exponent不同时为0
 
思路:(考察代码的完整性,考验对数据处理的严谨性)
  1.全面考察指数的正负、底数是否为零等情况。
  2.写出指数的二进制表达,例如13表达为二进制1101。
  3.举例:10^1101 = 10^0001*10^0100*10^1000。
  4.通过&1和>>1来逐位读取1101,为1时将该位代表的乘数累乘到最终结果。
 
class Solution {
public:
    double Power(double base, int exponent) {
        double res = 1,curr = base;
        int n;
        if(exponent > 0)
        {
            n = exponent;
        }
        else if(exponent< 0)
        {
            if(base == 0)
            {
                return -1;
            }
            n = -exponent;
        }
        else
        {
            return 1;
        }
        while(n != 0)
        {
            if((n & 1) == 1)
            {
                res *= curr;
            }
            curr*=curr;
            n >>= 1;
        }
        return exponent >=0?res:(1/res);
    }
};

比如,3^8 = 3^1010 = 3^1000 * 3^0010 = 3^8 * 3^2

 

   为上述代码做了一个简单的举例说明,方便理解

posted @ 2020-03-12 22:34  牛犁heart  阅读(115)  评论(0编辑  收藏  举报