首页 > 试题广场 >

进制转换

[编程题]进制转换
  • 热度指数:967969 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
\hspace{15pt}对于给定的十六进制数,输出其对应的十进制表示。
\hspace{15pt}在本题中,十六进制数的格式为:\texttt{0x} 开头,后跟若干个十六进制数字( \texttt{0-9}\texttt{A-F} )。其中,\texttt{A-F} 依次代表 10-15

输入描述:
\hspace{15pt}在一行上输入一个十六进制数 s ,代表待转换的十六进制数。
\hspace{15pt}保证 s 转化得到的十进制数 x 的范围为 1 \leqq x \leqq 2^{31}-1


输出描述:
\hspace{15pt}在一行上输出一个整数,代表 s 对应的十进制数。
示例1

输入

0xFA93

输出

64147

说明

\hspace{15pt}回忆十六进制转化为十进制的方法:从右往左,将第 i 位乘以 {\color{orange}{16^i}} ,然后求和。

\hspace{15pt}在这个样例中,\texttt{0xFA93} 的第 0 位是 \texttt{3} ,第 1 位是 \texttt{9} ,第 2 位是 \texttt{A} ,第 3 位是 \texttt{F} ,因此 \texttt{0xFA93} = 3 \times {\color{orange}{16^0}} + 9 \times {\color{orange}{16^1}} + 10 \times {\color{orange}{16^2}} + 15 \times {\color{orange}{16^3}} = 64147
public static void main(String[] args) {
        try(Scanner input = new Scanner(System.in)){
            while (input.hasNextLine()) {
                String str = input.nextLine();
                if(str.contains("0x") || str.contains("0X")){
                    str = str.replaceAll("^0[xX]", "").trim();
                }
                BigInteger integer = new BigInteger(str, 16);
                System.out.println(integer);
            }
        }
    }

发表于 2025-04-14 15:55:20 回复(0)
import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        String str = in.nextLine();
        char[] chars = str.toCharArray();
        int n = chars.length;
        long res = 0;
        for(int i = 2; i < n; i++){
            if('0' <= chars[i] && chars[i] <= '9'){
                res += (chars[i] - '0') * Math.pow(16, n - i - 1);
            }else{
                res += (chars[i] - 'A' + 10) * Math.pow(16, n - i - 1);
            }
        }
        System.out.println(res);
    }
}
发表于 2025-04-14 15:49:22 回复(0)
import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        
        String s = in.nextLine();
        StringBuilder str = new StringBuilder(s).reverse();
        int num=0;
        int tmp=1;
        for(int i=0;i<str.length()-2;i++){
            if(i>0){
                tmp=tmp*16;
            }
            StringBuilder a = new StringBuilder();
            a.append(str.charAt(i));
            int b=0;
            if(a.toString().equals("A")){
                b=10;
            }
            else if(a.toString().equals("B")){
                b=11;
            }
            else if(a.toString().equals("C")){
                b=12;
            }
            else if(a.toString().equals("D")){
                b=13;
            }
            else if(a.toString().equals("E")){
                b=14;
            }
            else if(a.toString().equals("F")){
                b=15;
            }else{
                b = Integer.valueOf(a.toString());
            }
            num=num+b*tmp;
        }
        System.out.println(num);
    }
}
发表于 2025-04-13 10:23:06 回复(0)
public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        char[] strChar = in.nextLine().toCharArray();
        Map<Character,Integer> abcdefMap = new HashMap<>();
        abcdefMap.put('A',10);
        abcdefMap.put('B',11);
        abcdefMap.put('C',12);
        abcdefMap.put('D',13);
        abcdefMap.put('E',14);
        abcdefMap.put('F',15);
        double result = 0;
        int cimi = 0;
        for(int i=strChar.length-1;i>=0;i--){
            if(String.valueOf(strChar[i]).equals(String.valueOf(0))
             || 'x'==strChar[i]) continue;
            int shuzi = abcdefMap.get(strChar[i])==null?Character.getNumericValue(strChar[i]):abcdefMap.get(strChar[i]);
            result = result + shuzi*(Math.pow(16,cimi));
            cimi++;
        }
        System.out.println((long)result);
    }

发表于 2025-04-05 18:46:39 回复(0)
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        while (in.hasNext()) {
            String str = in.nextLine();
            String[] arr = str.substring(2, str.length()).split("");
            int sum = 0;
            for (int i = 0; i < arr.length; i++) {
                int num = numSwitch(arr[i]);
                int mi = arr.length - 1 - i;
                sum += num * Math.pow(16, mi);
            }
            System.out.println(sum);
        }
    }

    private static int numSwitch(String str) {
        switch (str.toUpperCase()) {
            case "0":
            case "1":
            case "2":
            case "3":
            case "4":
            case "5":
            case "6":
            case "7":
            case "8":
            case "9":
                return Integer.parseInt(str);
            case "A":
                return 10;
            case "B":
                return 11;
            case "C":
                return 12;
            case "D":
                return 13;
            case "E":
                return 14;
            case "F":
                return 15;
            default:
                return 0;
        }
    }
}
发表于 2025-03-26 13:25:31 回复(0)
import java.util.HashMap;
import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String nextLine = sc.nextLine();
        HashMap<String, Integer> map = new HashMap<>();
        map.put("A",10);
        map.put("B",11);
        map.put("C",12);
        map.put("D",13);
        map.put("E",14);
        map.put("F",15);
     
            if(nextLine.startsWith("0x")) {
                String substring = nextLine.substring(2);
                char[] charArray = substring.toCharArray();
                int a = 0;
                int sum = 0;
                for (int i = charArray.length - 1; i >= 0; i--) {
                    char c = charArray[i];
                    if(map.get(String.valueOf(c))!=null){
                        Integer integer = map.get(String.valueOf(c));
                        sum += (int) (Math.pow(16,a)*integer);
                        a++;
                    }else {
                        Integer integer = Integer.valueOf(String.valueOf(c));
                        sum += (int) (Math.pow(16,a)*integer);
                        a++;
                    }
                }
                System.out.println(sum);
            }
       
    }
}
发表于 2025-03-09 23:16:24 回复(0)
  public static void main(String[] args) {

        Map<String, Integer> map = new HashMap<String, Integer>();
        map.put("A", 10);
        map.put("B", 11);
        map.put("C", 12);
        map.put("D", 13);
        map.put("E", 14);
        map.put("F", 15);

        Scanner sc = new Scanner(System.in);

        String input = sc.nextLine();

        String input16 = input.substring(2);
        Stack<String> stack = new Stack<String>();
        char[] cc = input16.toCharArray();
        for(int i=0;i<cc.length;i++){
            stack.push(String.valueOf(cc[i]));
        }

        int finalResult = 0;
        for(int i=0;i<cc.length;i++){
            String a = stack.pop();
            if (!Character.isDigit(a.charAt(0))) {
                finalResult+=map.get(a)* Math.pow(16,i);            
            }else{
                finalResult+=Integer.parseInt(a)* Math.pow(16,i);
            }
           
        }
        System.out.print(finalResult);
 }
发表于 2025-02-11 21:47:47 回复(0)
 System.out.print(Integer.parseInt(in.next().substring(2), 16));
使用Java自带的进制转换api 
发表于 2025-01-26 19:28:53 回复(0)
import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String a = in.nextLine();
        a = a.substring(2, a.length());
        int newa = Integer.parseInt(a, 16);
        System.out.println(newa);
    }
}

发表于 2024-12-26 10:00:11 回复(0)
private static Map<Character,Integer> map = new HashMap<>();

    static {

        map.put('A',10);
        map.put('B',11);
        map.put('C',12);
        map.put('D',13);
        map.put('E',14);
        map.put('F',15);
    }

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        while(scanner.hasNext()){
            String string = scanner.nextLine();
            // 排除掉前边的0x(代表16进制)
            String data = string.substring(2,string.length());
            char[] charArray = data.toCharArray();
            int n = 0;
            int sum = 0;
            for(int i = charArray.length-1;i>=0;i--){
                // 这里减0目的是为了获取整数值
                sum = sum + map.getOrDefault(charArray[i],charArray[i]-'0') * (int) Math.pow(16,n);
                n++;
            }
            System.out.println(sum);
        }
        scanner.close();
    }

发表于 2024-11-25 11:55:28 回复(0)
import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String str = in.next();
        char[] chars = str.toCharArray();
        int res = 0,x;
        for(int i = 2; i < chars.length; i++){
            char c = chars[i];
            if(c <= 'F' && c >= 'A'){
                x = c - 'A' + 10;
            }else{
                x = c - '0';
            }
            res = res * 16 + x;
        }
        System.out.println(res);
    }
}

发表于 2024-11-09 18:01:24 回复(0)
import java.util.Scanner;
import java.lang.Integer;//因为之后要用到Integer的方法

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String hexNum = in.nextLine();//因为只输入一个数且用\n结尾,所以将next方法改为nextLine
            hexNum = hexNum.substring(2);//字符串截取,即只要0x之后的内容
        int decimalNum = Integer.parseInt(hexNum,16);//此时hexNum是字符串,利用Integer的paseInt方法实现进制转换,16代表16进制
        System.out.println(decimalNum);
    }
}

发表于 2024-10-10 19:57:07 回复(0)

}
import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        Integer i =  Integer.parseInt(in.nextLine().substring(2),16);

        System.out.println(i);
    }
}

发表于 2024-08-20 16:45:35 回复(0)
package org.huawei.hwoj.induction;

/*
* HJ5 进制转换
* 写出一个程序,接受一个十六进制的数,输出该数值的十进制表示。
* 数据范围:保证结果在 1 ≤ 𝑛 ≤ 231−1
*
* 输入描述:
* 输入一个十六进制的数值字符串。
* 输出描述:
* 输出该数值的十进制字符串。不同组的测试用例用\n隔开。
*
* 示例1
* 输入:0xAA  输出:170  输入:0xAF  输出:175  输入:0xFF  输出:255
 * */

import java.util.Scanner;

public class DecimalConversion {
    //解题思路:套用进制转换的公式,即第n位(从低位开始)数字乘以进制的n-1次幂,加和
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while (sc.hasNext()) {
            //读入十六进制的数值字符串
            String s = sc.next();
            //转换后的结果值
            int result = 0;
            //由于前面两位是'0x',故从第三位开始
            for (int i = 0; i < s.length() - 2; i++) {
                char c = s.charAt(i + 2);
                //记录字母转换成的数值,字母'A-F'、'a-f'对应数字10-15
                int temp = 0;
                if (c >= '0' && c <= 9) {
                    temp = c - '0';
                } else if (c >= 'A' && c <= 'F') {
                    temp = c - 'A' + 10;
                } else if (c >= 'a' && c <= 'f') {
                    temp = c - 'a' + 10;
                }
                //累积求和:16进制的n-1次方
                result += temp * Math.pow(16, s.length() - i - 3);
            }
            System.out.println(result);
        }
    }
}


发表于 2024-08-16 14:47:07 回复(2)
fun main(args: Array<String>) {
    println(readLine()!!.drop(2).toInt(16))
}

编辑于 2024-08-12 21:47:56 回复(0)
public static void main(String[] args) throws IOException{
        BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
        char[] str = bf.readLine().replace("0x", "").toUpperCase().toCharArray();
        HashMap<String, Integer> map = new HashMap();
        map.put("A", 10);
        map.put("B", 11);
        map.put("C", 12);
        map.put("D", 13);
        map.put("E", 14);
        map.put("F", 15);
        int result = 0;
        //相乘次数
        int level = 0;
        for (int i = 0; i < str.length; i++) {
            //字母ascII码小于G
            if ((int)str[str.length - 1 - i] < 71) {
                level = 1 << (4 * i);
                if (map.get(String.valueOf(str[str.length - 1 - i])) != null)
                    result += map.get(String.valueOf(str[str.length - 1 - i])) * level;
                else result += Integer.parseInt(String.valueOf(str[str.length - 1 - i])) * level;
            } else {
                result = 0;
                System.out.println("输入字符串错误");
                break;
            }
        }
        if (result >= 1 && result <= (1 << 31 - 1)) {
            System.out.println(result);
        }
    }
发表于 2024-08-12 17:05:41 回复(0)
十六进制转为十进制,一层循环,故时间复杂度为O(len)
import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        while (scanner.hasNext()) {
            String input = scanner.nextLine();
            hexToDec(input);
        }
    }

    public static void hexToDec(String hex) {
        Map<Character, Integer> map = new HashMap();
        map.put('A', 10);
        map.put('B', 11);
        map.put('C', 12);
        map.put('D', 13);
        map.put('E', 14);
        map.put('F', 15);
        hex = hex.toUpperCase();
        int dex = 0;
        for (int i = 2; i < hex.length(); i++) {
            char ch = hex.charAt(i);
            if (map.containsKey(ch)) {
                dex = dex * 16 + map.get(ch);
            } else {
                dex = dex * 16 + ch - '0';
            }
        }
        System.out.println(dex);
    }
}


发表于 2024-06-30 15:38:28 回复(1)

问题信息

难度:
267条回答 166914浏览

热门推荐

通过挑战的用户

查看代码
进制转换