本文共 1012 字,大约阅读时间需要 3 分钟。
题目:实现函数double Power(double base, int exponent),求base的exponent次方。不得使用库函数,同时不需要考虑大数问题。
const double esp = 1e-6; bool isValid = false; // power函数返回0时,判断合不合法,true时不合法double powerWithUnsignedExponent(double base, int exponent) { // 此输入保证指数非负 if (exponent == 0) return 1; if (exponent == 1) return base; // 指数除以2递归 double ans = powerWithUnsignedExponent(base, exponent >> 1); ans *= ans; // 先在上一步递归里算出来a的(n/2)次方, 再平方 if ((exponent & 1)) { // 如果指数是奇数还要再乘以base (规律见p112) ans *= base; } return ans;}double power(double base, int exponent) { isValid = false; // 这是全局变量,不能省 ,默认合法 if (fabs(base - 0.0) <= esp && exponent < 0) { isValid = true; // 不合法 的0.0 return 0.0; } if (exponent == 0) return 1.0; if (base == 0) { return 0.0; // 合法的0.0 } //先把指数按正数处理 int temp = exponent < 0 ? -exponent : exponent; double ans = powerWithUnsignedExponent(base, temp); // 如果指数是负数,结果取倒数 if (exponent < 0) ans = 1 / ans; return ans; }
转载地址:http://jhzzi.baihongyu.com/