(Java) 演算法題:2的N次方

Mr.Bean-Pig發表於2020-10-21

題目描述

原題連結
2的N次方

對於一個整數N(512 <= N <= 1024),計算2的N次方並在螢幕顯示十進位制結果。

輸入描述:

輸入一個整數N(512 <= N <= 1024)

輸出描述:

2的N次方的十進位制結果

輸入例子1:

512

輸出例子1:

13407807929942597099574024998205846127479365820592393377723561443721764030073546976801874298166903427690031858186486050853753882811946569946433649006084096

思路

考察大數乘法。大數一般聯想到字串。但是字串不方便修改值,因此採用StringBuilder來表示大數。

迴圈n次進行X2操作,每次操作需要將StringBuilder中的字元依次取出X2並處理進位。

時間複雜度O(n^2)

程式碼

public class PowOf2 {
    public static void main(String[] args) {
         Scanner sc = new Scanner(System.in);
         int n = sc.nextInt();
         System.out.println(pow2(n));
    }

    private static String pow2(int n) {
        StringBuilder res = new StringBuilder( "1" );
        // 重複N次
        for (int i = 0; i < n; i++) {
            // 進位標誌,每輪清零
            int temp = 0;
            // result中的字元,從前往後逐位*2
            for (int j = res.length() -1; j >= 0; j--) {
                // 乘法運算,需要加上進位
                temp = ((res.charAt(j) - '0') <<1) + temp / 10 ;
                // 替換此位結果
                res.setCharAt(j, (char)(temp%10 + '0')) ;
            }
            // 產生進位則需新增新的數字
            if (temp/10 >= 1)
                res.insert(0,'1') ;
        }

        return res.toString();
    }
}

相關文章