进制转换

进制转换

       世界上只有两种秘密,骗自己的和以为能骗住别人的。

背景: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~拍一拍小轮胎


 

 

世界上只有两种秘密

骗自己的和以为能骗住别人的

 

 

原文地址:https://www.cnblogs.com/taojietaoge/p/13622718.html