zoukankan      html  css  js  c++  java
  • (剑指Offer)面试题11:数值的整数次方

    题目:

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

    思路:

    看题目似乎很简单,循环相乘不就行了吗?不是的。

    需要考虑几个问题:

    1、exponent为0或者负数;

    2、base为0且exponent为负数,其中判断base是否为0,需要考虑base为double类型;

    3、高效的计算方法:分治;

    代码:

    #include <iostream>
    #include <stdlib.h>
    
    using namespace std;
    
    bool equal(double num1,double num2){
        if(abs(num1-num2)<0.0000001)
            return true;
        else
            return false;
    }
    
    double PowerWithUnsignedExponent(double base,unsigned int absExponent){
        if(absExponent==0)
            return 1;
        if(absExponent==1)
            return base;
    
        double result=PowerWithUnsignedExponent(base,absExponent>>1);
        result=result*result;
        if((absExponent&0x1)==1)
            result=result*base;
    
        return result;
    }
    
    double Power(double base,int exponent){
        unsigned int absExponent=(unsigned int)exponent;
        if(exponent<0)
            absExponent=(unsigned int)(-exponent);
        double result=PowerWithUnsignedExponent(base,absExponent);
    
        if(exponent<0)
            result=1.0/result;
        return result;
    }
    
    int main()
    {
        cout<<Power(2,-3)<<endl;
        cout<<Power(0,-1)<<endl;
        cout<<Power(5,0)<<endl;
        return 0;
    }

    在线测试OJ:

    http://www.nowcoder.com/books/coding-interviews/1a834e5e3e1a4b7ba251417554e07c00?rp=1

    AC代码:

    class Solution {
    public:
        double Power(double base, int exp) {
            int exponent=exp>0?exp:(-exp);
            double p,result;
     
            if(exponent==0)
                return 1;
            if(exponent==1)
                return base;
                
            p=Power(base,exponent>>1);
            result=p*p;
            if(exponent&0x1)
                result=p*p*base;
     
            if(abs(result-0.0)<0.00000001)
                return result;
            return exp>0?result:(1/result);
        }
    };
  • 相关阅读:
    2019 上海网络赛 J stone name (01背包)
    CodeForces
    2019 年百度之星·程序设计大赛
    CodeForces
    POJ 3728 The merchant (树形DP+LCA)
    HihoCoder
    HihoCoder 1055 刷油漆 (树上背包)
    HI3518E平台ISP调试环境搭建
    有用的调节
    【HI3520DV200】sample
  • 原文地址:https://www.cnblogs.com/AndyJee/p/4630812.html
Copyright © 2011-2022 走看看