zoukankan      html  css  js  c++  java
  • 面试题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. 对效率要求比较高的面试官还会考查应聘者快速做乘方的能力;
  • 相关阅读:
    Java精选笔记_JSP技术
    Java精选笔记_JavaBean
    Java精选笔记_JSP开发模型
    Java精选笔记_XML基础
    Git_多人协作
    Git_Feature分支
    Git_Bug分支
    Git_分支管理策略
    Git_解决冲突
    Git_创建与合并分支
  • 原文地址:https://www.cnblogs.com/ovs98/p/9927805.html
Copyright © 2011-2022 走看看