题目:实现函数double Power(double base,int exponent),求base的exponent次方。
要点:定义域解析、错误处理、效率
代码:
#include<iostream> using namespace std; bool g_InvalidInput=false; double powerWithUnsignedExponent(double base,unsigned int exponent); bool equal(double num1,double num2) { if((num1-num2>-0.0000001)&&(num1-num2<0.0000001)) return true; else return false; } double power(double base,int exponent) { g_InvalidInput=false; if(equal(base,0.0)&&exponent<0) { g_InvalidInput=true; return 0.0; } 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; } 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; } int main() { double base; int exponent; cout<<"please enter base:"; cin>>base; cout<<"please enter exponent:"; cin>>exponent; cout<<base<<"^"<<exponent<<"="<<power(base,exponent)<<endl; return 0; }
原文:http://blog.csdn.net/pyz_tech/article/details/23663201