bool g_InvalidInput = false;
//注意double float等类型的相等比较
bool equal(double num1, double num2) {
if ((num1 - num2) > -0.000001 && (num1 - num2) < 0.000001) {
return true;
}
else
return false;
}
double PowerWithUnsignedExponent(double base, unsigned int exe) {
double result = 1.0;
for (int i = 1;i <= exe;i++) {
result *= base;
}
return result;
}
double PowerWithUnsignedExponent1(double base, unsigned int exe) {
if (exe == 0) {
return 1;
}
if (exe == 1) {
return base;
}
double result = PowerWithUnsignedExponent1(base, exe >> 1);
result *= result;
if (exe & 0x1 == 1) {
result *= base;
}
return result;
}
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;
}
剑指Offer:数值的整数次方
最新推荐文章于 2022-04-06 19:33:06 发布