進位轉換:
【任何進位】 轉成 【10進位】,並且印出算式
01.
02.
03.
【任何進位】 轉成 【10進位】,並且印出算式
截圖
01.
02.
03.
程式碼
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class zhuan_shi { // 顯示指數 public static String ci_fang(int a) { String s = String.valueOf(a); s = s.replace("0", "⁰"); s = s.replace("1", "¹"); s = s.replace("2", "²"); s = s.replace("3", "³"); s = s.replace("4", "⁴"); s = s.replace("5", "⁵"); s = s.replace("6", "⁶"); s = s.replace("7", "⁷"); s = s.replace("8", "⁸"); s = s.replace("9", "⁹"); return s; } // 英文轉數字 public static int ying_zhuan_shu(String s) { String[] y = { "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z" }; int[] z = { 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35 }; for (int i = 0; i <= 25; i++) { if (s.toUpperCase().equals(y[i])) { return z[i]; } } return Integer.valueOf(s); } public static void main(String[] args) throws IOException { BufferedReader sc = new BufferedReader( new InputStreamReader(System.in)); System.out.println("任何進位→10進位\n//-----------------------"); System.out.print("輸入進位值:"); int jin_wei = Integer.valueOf(sc.readLine());// 進位值 System.out.print("輸入轉換的數字:"); String shu_ru = sc.readLine();// 輸入的值 int chang = shu_ru.length();// 長度 int[] zan_cuen = new int[chang + 1];// 暫存 long sum = 0;// 答案的加總 String a1, a2, a3; boolean cuo = false;// 判斷是否有錯誤 String cuo_zi = "";// 顯示的錯誤內容 String in = "";// 最後顯示的結果 in += (jin_wei + "進位:" + shu_ru + " → 10進位\n\n"); for (int i = 0; i <= chang - 1; i++) { if (i == chang - 1) { a1 = ""; } else { a1 = shu_ru.substring(0, chang - (i + 1)); } // 取得目前要被轉換的數字 a2 = shu_ru.substring(chang - (i + 1), chang - i); if (i == 0) { a3 = ""; } else { a3 = shu_ru.substring(chang - i, chang); } zan_cuen[i] = (int) (Integer.valueOf(ying_zhuan_shu(a2)) * Math .pow(jin_wei, i));// 暫存( a2*進位值^i ) if (zan_cuen[i] > 2100000000) { cuo = true;// 超過21億 cuo_zi = "你入的數字太大(計算結果超過21億將無法計算)";// 顯示的錯誤內容 } in += (a1 + "<" + a2 + ">" + a3 + " → " + a2 + "×" + jin_wei + ci_fang(i) + " = " + String.format("%2d", ying_zhuan_shu(a2)) + "×" + (int) Math.pow(jin_wei, i) + " = " + zan_cuen[i] + "\n"); } in += "\n"; for (int i = 0; i <= chang - 1; i++) { sum += zan_cuen[i]; if (i == chang - 1) { in += (zan_cuen[i]);// 如果是最後一個數字,則不印出"+" } else { in += (zan_cuen[i] + "+"); } } if (cuo == true) { in = ("檢視結果:\n" + cuo_zi); } in += ("\n答案= " + sum); System.out.println(in);// 顯示計算結果 System.gc();// 釋放記憶體 } } |