剑指offer 面试题:数值的整数次方

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

思路:这个题目可以求某个数字的 平方根,立方根。思路就是先判断不合法输入,也就是0分之1,base=0且exponent<0的情况。然后判断exponent是否<0,如果小于0其实可以先算-exponent的 情况(也就是正数),然后统一计算base的正数exponent的次方,其实就是将exponent个base  乘起来。然后返回(若exponent<0,就返回1除以返回值)

class Solution {
public:
    double Power(double base, int exponent) {
        if(base==0 && exponent<0) return 0;
        int absexp = exponent;
        if(exponent<0) absexp=-absexp;
        double res = cal(base,absexp);
        if(exponent<0) return 1.0/res;
        return res;
    }
    double cal(double base,int exp)   //用位运算来操作,o(logn)复杂度
    {
        if(exp==0) return 1;
        if(exp==1) return base;
        double res=cal(base,exp>>1);   //每次计算除以2的,然后将他俩相乘
        res*=res;
        if(exp&1) res*=base;   //如果exponent是奇数,那就多乘以个base就行
        return res;
    }
    double cal0(double base,int exp)   //一步一步乘
    {
        double res=1.0;
        for(int i=1;i<=exp;++i) res*=base;
        return res;
    }
};

 

你可能感兴趣的:(数据结构/算法/刷题)