LeetCode 50.Pow(x, n)

来源:互联网 发布:帮开淘宝店铺 编辑:程序博客网 时间:2024/05/17 16:00
public static double myPow(double x, int n) {        if(n == 0)        return 1;        if(n < 0 ){        n = - n;        x = 1 / x;        }           if(n == -2147483648)        return (n % 2 == 0) ? myPow(x * x, -(n/2)) : x * myPow(x * x, -(n/2));        else        return (n % 2 == 0) ? myPow(x * x, n/2 ) : x * myPow(x * x, n/2);    }

主要思想;极限情况一共有两种,1、n = 0,返回1即可,2、n = -2147483648,这种情况如果取反应为2147483648,但是这个数超出了整数的范围,因此取反的结果还是-2147483648,这时就需要重新判断一下。

api中的要求:
返回第一个参数的第二个参数次幂的值。特殊情况如下:
如果第二个参数为正 0 或负 0,那么结果为 1.0。
如果第二个参数为 1.0,那么结果与第一个参数相同。
如果第二个参数为 NaN,那么结果为 NaN。
如果第一个参数为 NaN,第二个参数非 0,那么结果为 NaN。
如果
第一个参数的绝对值大于 1,并且第二个参数为正无穷大,或者
第一个参数的绝对值小于 1,并且第二个参数为负无穷大,
那么结果为正无穷大。
如果
第一个参数的绝对值大于 1,并且第二个参数为负无穷大,或者
第一个参数的绝对值小于 1,并且第二个参数为正无穷大,
那么结果为正 0。
如果第一个参数的绝对值等于1,并且第二个参数为无穷大,那么结果为 NaN。
如果
第一个参数为正 0,并且第二个参数大于 0,或者
第一个参数为正无穷大,并且第二个参数小于 0,
那么结果为正 0。
如果
第一个参数为正 0,并且第二个参数小于 0,或者
第一个参数为正无穷大,并且第二个参数大于 0,
那么结果为正无穷大。
如果
如果第一个参数为负 0,并且第二个参数大于 0 但不是有限的奇数整数,或者
第一个参数为负无穷大,并且第二个参数小于 0 但不是有限的奇数整数,
那么结果为正 0。
如果
第一个参数为负 0,并且第二个参数为正的有限奇数整数,或者
第一个参数为负无穷大,并且第二个参数为负的有限奇数整数,
那么结果为负 0。
如果
如果第一个参数为负 0,并且第二个参数小于 0 但不是有限的奇数整数,或者
第一个参数为负无穷大,并且第二个参数大于 0 但不是有限的奇数整数,
那么结果为正无穷大。
如果
第一个参数为负 0,并且第二个参数为负的有限奇数整数,或者
第一个参数为负无穷大,并且第二个参数为正的有限奇数整数,
那么结果为负无穷大。
如果第一个参数为小于 0 的有限值,
如果第二个参数为有限的偶数整数,那么结果等于第一个参数绝对值的第二个参数次幂的结果。
如果第二个参数为有限的奇数整数,那么结果等于负的第一个参数绝对值的第二个参数次幂的结果。
如果第二个参数为有限的非整数值,那么结果为 NaN。
如果两个参数都为整数,并且结果恰好可以表示为一个 double 值,那么该结果恰好等于第一个参数的第二个参数次幂的算术结果。