JAva計算Xのn次方問題解決策

3961 ワード

1.最も簡単で最も効率の低いforサイクルN回xの乗算は再び何も説明しない.再帰でサイクルを半減し、A:Nが偶数の場合、(x^n/2)^2 B:nが奇数の場合、x(x^m)^2 C:nは0に等しく1 D:nは1に等しくxを返す3.シフトを用いてnをバイナリ数に変換し、各バイナリビットをスキャンし、0の場合、直接二乗し、1の場合、そうでなければ二乗してxを乗じる.第2の第3の具体的な実現は以下の通りである.
コードブロック
コードブロック構文は、標準markdownコードに従います.たとえば、次のようにします.
public class X_n {
    public static void main(String args[]) {
        int x = power(3, 4);
        System.out.println(x);

        int x1 = powerByBinary(3, 5);
        System.out.println(x1);
    }

    /**
     *      : n       ,        ,  0 ,     ,        x
     * 
     * @param x
     * @param n
     * @return 
     */
    private static int powerByBinary(int x, int n) {
        if (n == 0 ) {
            return 1;
        }
        if (n == 1 ) {
            return x;
        }
        int y = 1;
        String str = Integer.toBinaryString(n);
        for (int a = 0; a < str.length(); a++) {
            // char     int
            int s = Integer.parseInt(String.valueOf(str.charAt(a)));
            y = y * y;
            System.out.println("=============== ");
            System.out.println("y * y = " + y);
            if (s == 1) {
                y = y * x;
                System.out.println("y * x = " + y);
            }
        }
        return y;
    }


    /**
     *      :       ,x n  , n   , x n    (x^n/2)^2,    x(x^m)^2
     * 
     * @param x
     * @param n
     * @return
     */
    private static int power(int x, int n) {
        int result = 0;
        if (n == 0) {
            result = 1;
        } else {
            result = power(x, n / 2);
            result = result * result;
            if (n % 2 != 0) {
                result = x * result;
            }
        }
        return result;
    }
}