原題連接
2的N次方java
對於一個整數N(512 <= N <= 1024),計算2的N次方並在屏幕顯示十進制結果。web
輸入描述:svg
輸入一個整數N(512 <= N <= 1024)
輸出描述:ui
2的N次方的十進制結果
輸入例子1:spa
512
輸出例子1:code
13407807929942597099574024998205846127479365820592393377723561443721764030073546976801874298166903427690031858186486050853753882811946569946433649006084096
考察大數乘法。大數通常聯想到字符串。可是字符串不方便修改值,所以採用StringBuilder來表示大數。xml
循環n次進行X2操做,每次操做須要將StringBuilder中的字符依次取出X2並處理進位。token
時間複雜度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(); } }