活动发起人@小虚竹 想对你说:
这是一个以写作博客为目的的创作活动,旨在鼓励大学生博主们挖掘自己的创作潜能,展现自己的写作才华。如果你是一位热爱写作的、想要展现自己创作才华的小伙伴,那么,快来参加吧!我们一起发掘写作的魅力,书写出属于我们的故事。我们诚挚邀请你参加为期14天的创作挑战赛!
提醒:在发布作品前,请将不需要的内容删除。
一、题目要求
请问十六进制数 2021ABCD 对应的十进制是多少?
二、代码展示
import java.util.Scanner;
// 1:无需package
// 2: 类名必须Main, 不可修改
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
String str = "2021ABCD"; // 可以改为从输入读取,例如:String str = scan.nextLine();
long sum = 0;
for(int i = str.length() - 1; i >= 0; i--){
char c = str.charAt(i);
int value;
if(c >= '0' && c <= '9'){
value = c - '0';
}
else if(c >= 'A' && c <= 'D'){
value = c - 'A' + 10;
}
else{
// 处理无效字符(可选)
System.out.println("无效的十六进制字符: " + c);
scan.close();
return;
}
sum = sum * 16 + value;
}
System.out.println(sum);
scan.close();
}
}
}
}
核心代码解释:
1. 循环遍历:从字符串的最后一个字符开始,向前遍历每个字符。
2. 获取字符:`char c = str.charAt(i);` 获取当前索引 `i` 的字符。
3. 计算字符对应的数值:
- 如果字符是 `'0'` 到 `'9'`,则 `value = c - '0';` 将字符转换为对应的整数值。
- 如果字符是 `'A'` 到 `'D'`,则 `value = c - 'A' + 10;` 将字母转换为对应的十进制值(A=10, B=11, ..., D=13)。
(1)字符 `c`:
- `c` 是一个字符变量,通常是一个字母(如 `'A'`, `'B'`, ..., `'F'`)。
- 在C语言中,字符实际上是以ASCII码存储的。例如:
- `'A'` 的ASCII码是 `65`
- `'B'` 的ASCII码是 `66`
(2)表达式 `c - 'A'`:
- 这部分计算的是字符 `c` 相对于 `'A'` 的偏移量。
- 例如:
- 如果 `c = 'A'`,那么 `c - 'A' = 65 - 65 = 0`
- 如果 `c = 'B'`,那么 `c - 'A' = 66 - 65 = 1`
- 这样,每个字母相对于 `'A'` 的偏移量对应其在字母表中的位置。(3)加上 `10`:
- 由于在十六进制中,`'A'` 对应 `10`,`'B'` 对应 `11`,依此类推。
- 因此,通过将偏移量加上 `10`,可以将 `'A'` 转换为 `10`,`'B'` 转换为 `11`,等等。
- 例如:
- `'A'` 的偏移量是 `0`,加上 `10` 后得到 `10`
- `'B'` 的偏移量是 `1`,加上 `10` 后得到 `11`
- 如果字符不在上述范围内,输出错误信息并终止程序。
4. 累加到总和:`sum = sum * 16 + value;` 将当前位的值加入总和。这里使用 `16` 是因为我们在处理十六进制数。