题解 | 进制转换
进制转换
https://www.nowcoder.com/practice/8f3df50d2b9043208c5eed283d1d4da6
#include <stdio.h>
#include <string.h>
int main() {
char s[50];
int n=0,sum=0;
scanf("%s",s);
for(int i=2;i<strlen(s);i++){
if(s[i]>='0'&&s[i]<='9'){
n=s[i]-'0';
}
else if(s[i]>='A'&&s[i]<='F'){
n=s[i]-'A'+10;
}
sum=sum*16+n;
}
printf("%d\n",sum);
return 0;
}
核心思路
- 跳过前缀:通常十六进制以 "0x" 或 "0X" 开头,下标从2开始处理。
- 逐位转换:遍历每个字符,若为 '0'~'9' 则映射为 0~9;若为 'A'~'F' 则映射为 10~15。
- 累加计算:sum = sum * 16 + 当前位值。
- 输出结果:直接打印 sum。
查看21道真题和解析