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

分析:

有的面试者可能认为题目很简单,因此顺手就写下了如下代码:

doublePower(doublebase,intexponent){doubleresult=1.0;for(inti=q;i<=exponent;++i)result*=result;returnresult;}

如果写出这样的代码,那么请面壁思过!


全面但不够高效的解法

boolg_InvalidInput=false;doublePower(doublebase,intexponent){g_InvalidInput=false;if(equal(base,0.0)&&exponent<0){g_InvalidInput=true;return0.0;}unsignedintabsExponent=(unsignedint)(exponent);if(exponent<0)absExponent=(unsignedint)(-exponent);doubleresult=PowerWithUnsignedExponent(base,absExponent);if(exponent<0)result=1.0/result;returnresult;}doublePowerWithUnsignedExponent(doublebase,unsignedintexponent){doubleresult=1.0;/for(inti=1;i<=exponent;++i)result*=base;returnresult;}boolequal(doublenum1,doublenum2){if((num1-num2>-0.0000001)&&(num1-num2<0.0000001))returntrue;elsereturnfalse;}

其实,上述解法已经比较全面了,但是如果遇到追求效率的面试官,则会提醒你还有更高效的方法。

这个公式很容易使用递归来实现

doublePowerWithUnsignedExponent(doublebase,unsignedintexponent){if(exponent==0)return1;if(exponent==1)returnbase;doubleresult=PowerWithUnsignedExponent(base,exponent>>1);result*=result;if((exponent&0x1)==1)result*=base;returnresult;}