进制转换
知识点 字符串
描述
对于给定的十六进制数,输出其对应的十进制表示。
在本题中,十六进制数的格式为:0x 开头,后跟若干个十六进制数字(保证为 0-9 和 A-F 中的一个)。其中,A-F 依次代表十进制中的 10∼15。
输入描述:
在一行上输入一个十六进制数 s,代表待转换的十六进制数,格式见题干。保证 s 转化得到的十进制数 x 的范围为 1≦x<2^31。
输出描述:
在一行上输出一个整数,代表 s 对应的十进制数。

我的答案:
import java.util.Scanner;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String str = in.nextLine();
String numStr = str.replace("0x", "");
int count = 0;
Long sum = 0L;
for (int i = numStr.length()-1; i >= 0; i--) {
Long a = 1L << (4 * count);
sum += a * toInt(String.valueOf(numStr.charAt(i)));
count++;
}
System.out.println(sum);
}
public static int toInt(String c) {
switch (c) {
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 Integer.parseInt(c);
}
}
}个人思路解析
如果没有进制说明,进制推算也会是个考点;
16的次方的计算:循环乘(暴力解法吧)、位运算、
Math.pow(16, n);A-F的数值转换:字符与 ASCII 码的关系;(我写的比较笨)
当然,既然标着知识点 字符串, 字符串的基本操作算是基础知识点了。
拾得
字符与 ASCII 码的核心关系是:ASCII 码是字符的 “数字编号”,每个基础字符(英文字母、数字、常用符号)都对应唯一的 ASCII 十进制数,Java 中char类型本质就是存储这个编号(ASCII 是 Unicode 的子集,范围 0-127)。
核心映射关系
字符是 “表象”(如
'0'、'A'、'a'),ASCII 码是 “底层数字”(如 48、65、97)。每个基础字符(英文字母、数字、标点)在 ASCII 表中都有固定编号,且编号按规律排列:
数字字符
'0'-'9':ASCII 码从 48 到 57('0'=48,'1'=49,…,'9'=57)。大写英文字母
'A'-'F':ASCII 码从 65 到 70('A'=65,'B'=66,…,'F'=70)。小写英文字母
'a'-'z':ASCII 码从 97 到 122('a'=97,'b'=98,…,'f'=102)。
Java 中的转换逻辑
直接强转:
char转 ASCII 码用(int)字符,ASCII 码转char用(char)数字。System.out.println((int)'0'); // 输出48('0'的ASCII码) System.out.println((int)'A'); // 输出65('A'的ASCII码) System.out.println((char)65); // 输出'A'(ASCII码65对应字符)字符运算本质是 ASCII 码运算:之前题目中
'5' - '0' = 5,本质是53 - 48 = 5;'A' - 'A' +10 =10,本质是65-65+10=10。