1. 程式人生 > 實用技巧 >學習心得2020.08.23

學習心得2020.08.23

進位制轉換

世界上只有兩種祕密,騙自己的和以為能騙住別人的。

背景:Java 線上程式設計機試刷題。

題目描述:

寫出一個程式,接受一個十六進位制的數,輸出該數值的十進位制表示。(多組同時輸入

輸入描述:

輸入一個十六進位制的數值字串。

輸出描述:

輸出該數值的十進位制字串。

示例1:

輸入:

0xA

輸出:

10

Java程式碼:

 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~拍一拍小輪胎


世界上只有兩種祕密

騙自己的和以為能騙住別人的