• 面试题16:数值的整数次方


    一.题目

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

    二.思路

    这道题很简单,但是要留意一些细节,比如

    • 底数为0,指数不能为负数(不能对0求倒)
    • 底数、指数均为0,最后结果是1。

    在数学里面0^0是未定式;
    但在离散里面0^0=1;
    在计算机中,规定了0^0=1;

    我们可以用如下的公式求a的n次方(快速幂方法)

    image

    三.代码

    //case 1
    double power(double base,double exponent){
        
        double result = 1.0;
        for(int i = 1;i <= exponent;++i)
            result *= base;
    
        return result;
    }
    
    //case2
    bool g_InvalidInput = fasle;
    double power(double base,double exponent){
        
        g_InvalidInput = false;
        if(equal(base,0.0) && exponent < 0){
            g_InvalidInput = true;
            return;
        }
    
        if(exponent < 0)
            exponent = -exponent;
        unsigned int absExponent = (unsigned int)(exponent);
    
        double result = PowerWithUnsignedExponent(base,absExponent);
        if(exponent < 0)
            result = 1.0 / result;
    
        return result;
    
    }
    double PowerWithUnsignedExponent(double base,unsigned int exponent){
        double result = 1.0;
        for(int i = 1;i <= exponent;i++)
            result *= base;
    
        return result;
    }
    
    //case3
    double PowerWithUnsignedExponent(double base,unsigned int exponent){
        
        if(exponent == 0)
            return 1;
        if(exponent == 1)
            return base;
    
        double result = PowerWithUnsignedExponent(base,exponent >> 1);
        result *= result;
        if(exponent & 0x1 == 1)
            result *= base;
    
        return result;
    }

    四.本题考点

    1. 考查应聘者思维的全面性。这个问题本身不难,但能顺利通过的应聘者不是很多。有很多人会忽略底数为0而指数为负数时的错误处理(这里我们采用了全局变量);
    2. 对效率要求比较高的面试官还会考查应聘者快速做乘方的能力;
  • 相关阅读:
    DOM事件模型
    值类型和引用类型的区别
    CSS盒模型
    reflow和repaint
    CSS优化
    跨域的几种方法
    快速排序
    vs2017开发ActiveX(主讲OCX)(五)、事件
    vs2017开发ActiveX(主讲OCX)(四)、绘制ActiveX控件
    vs2017开发ActiveX(主讲OCX)(三)、MFC ActiveX控件向导中的控件设置
  • 原文地址:https://www.cnblogs.com/ovs98/p/9927805.html
Copyright © 2020-2023  润新知