首页 > 学院 > 开发设计 > 正文

【剑指offer】面试题11:数值的整数次方

2019-11-06 07:31:47
字体:
来源:转载
供稿:网友

首先,我们分析下可能出现的情况:指数可能为负值,我们先求指数的绝对值次方,然后求导。->求导,那就要考虑分母不为0的情况了。

bool g_InvalidInput = 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 absExponent){ double result = 1.0; for (int i = 0; i < absExponent; ++i) { result *= base; } return result;}bool equal(double num1, double num2){ if ((num1-num2<0.000001) && (num1-num2>-0.000001)) { return true; } return false;}

第二种方法: a^n 当n为偶数时,a^n=a^(n/2); 当n为奇数时,a^n=a^((n-1)/2)*a^((n-1)/2)*a;

double PowerWithUnsignedExponent(double base, unsigned absExponent){ if (absExponent == 0) { return 1; } if (absExponent == 1) { return base; } double result = PowerWithUnsignedExponent(base, absExponent >> 1); result *= result; if (absExponent & 0x1) { result *= base; } return result;}
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表