数值的整数次方

来源:互联网 发布:js改变display属性 编辑:程序博客网 时间:2024/05/16 13:50

题目描述

给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。

当然不能用库函数,否则就没意思了。。。

乍看挺简单,但是我们要考虑全面,考虑一些不同情况:

(1)底数为0,指数为0,无意义

(2)底数为0,指数为负,无意义

(3)指数为正

(4)指数为负

对于牛客上这道题,测试用例没有非法的输入,所以程序中没有处理,但是一定要考虑到这些情况

可以递归求解:时间复杂度为O(logn)


判断是否为偶数和除法都用位运算

代码1:

class Solution {public:    double Power(double base, int exponent) {        if(base==0)            return 0;        if(exponent==0)            return 1;        if(exponent==1)            return base;        int flagExp=0;        if(exponent<0)            flagExp=1;        exponent=abs(exponent);        double re=recurPower(base,exponent);        if(flagExp)            re=1.0/re;        return re;    }    double recurPower(double base,unsigned int exponent){        if(exponent==1)            return base;        int re=Power(base,exponent>>1);        re*=re;        if(exponent&1)            re*=base;        return re;    }};

还可以这样写:

代码2:

class Solution {public:    double Power(double base, int exponent) {        if(base==0)            return 0;        if(exponent==0)            return 1;        unsigned int absExponent=abs(exponent);        double re=recurPower(base,absExponent);        return exponent>0?re:1.0/re;    }    double recurPower(double base,unsigned int absExponent){        if (absExponent == 1)return base;        if(absExponent&1)            return recurPower(base*base,absExponent>>1)*base;        else            return recurPower(base*base,absExponent>>1);    }};


0 0
原创粉丝点击