Fork me on GitHub

LeetCode 50 Pow(x, n) (实现幂运算)

 
Problem:实现幂运算即 pow(x,n)
 
设形式为pow(x,n) = x^n,则有一下分支:
当x==0时,返回0
当n==0时,返回1
当n<0时,(此时需要注意,不能直接将n = -n,因为最小负数变为相反数之后会超过int的最大范围)
     需要判断if( n == Integer.MIN_VALUE) 先对n++  然后n = -n ;  x = 1/x; return x * x * myPow( x*x, n/2 );//这里乘以两个x
     else n = -n;  x = 1/x; 
 
 
最后结果 return (n%2==0)? myPow(x*x,n/2):x*myPow(x*x,n/2);
 
 
参考代码: 
package leetcode_50;


/***
 * 
 * @author pengfei_zheng
 * 实现幂运算
 */
public class Solution50 {
    public static double myPow(double x, int n) {
        if(x==0) return 0;
        if(n==0) return 1;
        if(n<0){
                if( n == Integer.MIN_VALUE){
                    ++n;
                    n = -n;
                    x = 1/x;
                    return x * x * myPow( x*x, n/2 );
                }
                n = -n;
                x = 1/x;
        }
        return (n%2==0)? myPow(x*x,n/2):x*myPow(x*x,n/2);
    }
    public static void main(String[]args){
            System.out.println(myPow(9,100));
    }
}

 

 
posted @ 2017-03-14 14:25  伊甸一点  阅读(360)  评论(0编辑  收藏  举报