题目:给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。保证base和exponent不同时为0(不需要考虑大数问题)
bool g_InvalidInput = false; //采用全局变量标识是否出错 class Solution { public: //递归 double PowerWithUnsignedExponent(double base, unsigned int exponent) { if(exponent == 0) { return 1; } if(exponent == 1) { return base; } //若exponent为32:32,16,8,4,2,1 => //result:1,exponent,exponent*exponent,.... double result = PowerWithUnsignedExponent(base, exponent >> 1); //用右移>>代替 /2 //exponent为偶数 result *= result; //exponent为奇数 if((exponent & 0x1) == 1) //用位与&代替求余% { result *= base; } return result; } //指数为正数/负数 double Power(double base, int exponent) { //底数为零,指数是负数 if( (fabs(base-0.0) <= 0.000001) && (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; } };
原文:https://www.cnblogs.com/xiexinbei0318/p/11415962.html