學習心得2020.08.23
阿新 • • 發佈:2020-09-06
進位制轉換
世界上只有兩種祕密,騙自己的和以為能騙住別人的。
背景:Java 線上程式設計機試刷題。
題目描述:
寫出一個程式,接受一個十六進位制的數,輸出該數值的十進位制表示。(多組同時輸入)
輸入描述:
輸入一個十六進位制的數值字串。
輸出描述:
輸出該數值的十進位制字串。
示例1:
輸入:
0xA輸出:
10Java程式碼:
1 import java.util.Scanner;
2 public class Main{
3
4 private static final String A = "A";
5 private static final String B = "B";
6 private static final String C = "C";
7 private static final String D = "D";
8 private static final String E = "E";
9 private static final String F = "F";
10
11 private static int changeBinary(String input){
12 int length = input.length();
13 int num = length - 2;
14 int tenBinaryResult = 0;
15 int [] binaryArray = new int [num];
16 for(int i = 0; i < num; i++){
17 String singleBinary = input.substring(i+2, i+3);
18 switch(singleBinary){
19 case A:
20 binaryArray[i] = 10;
21 break;
22 case B:
23 binaryArray[i] = 11;
24 break;
25 case C:
26 binaryArray[i] = 12;
27 break;
28 case D:
29 binaryArray[i] = 13;
30 break;
31 case E:
32 binaryArray[i] = 14;
33 break;
34 case F:
35 binaryArray[i] = 15;
36 break;
37 default:
38 binaryArray[i] = Integer.parseInt(singleBinary);
39 }
40 double singleResult = binaryArray[i] * Math.pow(16, num - i -1);
41 tenBinaryResult += singleResult;
42 }
43 return tenBinaryResult;
44 }
45
46 public static void main(String [] args){
47 Scanner scanner = new Scanner(System.in);
48 while(scanner.hasNext()){
49 String input = scanner.nextLine();
50 int output = changeBinary(input);
51 System.out.println(output);
52 }
53 }
54
55 }
輸出驗證:
本地IDEA 驗證:
1 package com.ausclouds.bdbsec.tjt;
2
3
4 import java.util.Scanner;
5
6 /**
7 * @author tjt
8 * @time 2020-9-6
9 * @desc 進位制轉換:
10 * 十六進位制數採用表示16個符號來表示0~15,其中0~9就用0~9來表zhi示,形式相同,
11 * 但10~15卻必須用1個符號而不是兩個符號來表示,於是就用A~F(小寫a~f也行)來表示10~15了:
12 * 10 -> A,11 -> B,12 -> C,13 -> D,14 -> E,15 -> F。
13 * 將十六進位制數轉換成十進位制數的話,就將每一位的十六進位制數碼(0~9和A~F)先轉換成十進位制數碼(0~15),
14 * 再將其乘以該數碼所在位置的位權,並將其相加就可以。例如:
15 * 十六進位制數0x2AD5,字首0x是用來表示十六進位制數的
16 * 0x2AD5 = 2*16^3 + 10*16^2 + 13*16^1 + 5*16^0 = 8192 + 2560 + 208 + 5 = 10965。
17 */
18 public class Main {
19
20 private static final String A = "A";
21 private static final String B = "B";
22 private static final String C = "C";
23 private static final String D = "D";
24 private static final String E = "E";
25 private static final String F = "F";
26
27 /**
28 * changeBinary
29 * @param input
30 * @return
31 */
32 private static int changeBinary(String input) {
33 int length = input.length();
34 // 輸入格式為:0xA,剔除"0x"所佔用的空間: length -2。
35 int num = length - 2;
36 int tenBinaryResult = 0;
37 int[] binaryArray = new int[num];
38 for (int i = 0; i < num; i++) {
39 // 去掉"0x"兩個字元,直接擷取"A"。
40 String singleBinary = input.substring(i + 2, i + 3);
41 switch (singleBinary) {
42 // 匹配十六進位制
43 case A:
44 binaryArray[i] = 10;
45 break;
46 case B:
47 binaryArray[i] = 11;
48 break;
49 case C:
50 binaryArray[i] = 12;
51 break;
52 case D:
53 binaryArray[i] = 13;
54 break;
55 case E:
56 binaryArray[i] = 14;
57 break;
58 case F:
59 binaryArray[i] = 15;
60 break;
61 default:
62 binaryArray[i] = Integer.parseInt(singleBinary);
63 }
64 // 轉換為十進位制 : 乘以該數碼所在位置的位權
65 double singleResult = binaryArray[i] * Math.pow(16, num - i - 1);
66 // 位權相加
67 tenBinaryResult += singleResult;
68 }
69 return tenBinaryResult;
70 }
71
72 public static void main(String[] args) {
73 Scanner scanner = new Scanner(System.in);
74 while (scanner.hasNext()) {
75 String input = scanner.nextLine();
76 int output = changeBinary(input);
77 System.out.println(output);
78 }
79 }
80
81 }
View Code~拍一拍小輪胎
世界上只有兩種祕密
騙自己的和以為能騙住別人的