【剑指Offer学习】【面试题11 :数值的整数次方】

代码实现:

public class Test11 {/*** 实现函数double Power(double base, int exponent),求base的exponent次方。* 不得使用库函数,同时不需要考虑大数问题。** @param base指次* @param exponent 幂* @return 结果*/public static double power(double base, int exponent) {// 指数和底数不能同时为0if (base == 0 && exponent == 0) {throw new RuntimeException("invalid input. base and exponent both are zero");}// 指数为0就返回1if (exponent == 0) {return 1;}// 求指数的绝对值long exp = exponent;if (exponent < 0) {exp = -exp;}// 求幂次方double result = powerWithUnsignedExponent(base, exp);// 指数是负数,要进行求倒数if (exponent < 0) {result = 1 / result;}// 返回结果return result;}/*** 求一个数的正整数次幂,不考虑溢出** @param base指次* @param exponent 幂* @return 结果*/public static double powerWithUnsignedExponent(double base, long exponent) {// 如果指数为0,返回1if (exponent == 0) {return 1;}// 指数为1,,返回底数if (exponent == 1) {return base;}// 递归求一半的值double result = powerWithUnsignedExponent(base, exponent >> 2);// 求最终的值,如果是奇数就还要剩以一次底数result *= result;if (exponent % 2 != 0) {result *= base;}// 返回结果return result;}public static void main(String[] args) {System.out.println(0.0000000000000000000000001111 == 0);System.out.println(0.0000000000000000000000000000 == 0);System.out.println(power(2, -4));System.out.println(power(2, 4));System.out.println(power(2, 0));System.out.println(power(0.00000000000000000000000000001, -1));System.out.println(power(0.00000000000000000000000000001, 1));System.out.println(power(0.00000000000000000000000000001, 0));System.out.println(power(0.00000000000000000000000000000, 0));}运行结果:

眼睛可以近视,目光不能短浅。

【剑指Offer学习】【面试题11 :数值的整数次方】

相关文章:

你感兴趣的文章:

标签云: