C语言输入一个数字,其进制数可能为以下四种形式: 二进制:以0b开头,包含字符0和1; 八进制:以0开头,包含字符0~7; 十进制:包含字符0-9,且除了自然数0以外的数字不以0开头; 十六进制:以0x开头,包含字符0~9和a~f。 请你将输入数字转换为十进制数字输出。 注意:若输入为0,我们认为它是十进制数,可直接输出0。
时间: 2023-12-06 12:39:33 浏览: 32
可以使用scanf函数读入一个字符串,然后根据字符串的开头字符判断其进制数类型,然后使用相应的函数将其转换为十进制数类型。下面是一个示例代码:
```c
#include <stdio.h>
#include <string.h>
int main() {
char str[20]; // 最长的可能输入为0xffffffff,长度为10+2+8=20
scanf("%s", str);
int len = strlen(str);
int num = 0;
if (str[0] == '0') { // 判断进制数类型
if (len > 1 && (str[1] == 'x' || str[1] == 'X')) { // 十六进制
for (int i = 2; i < len; i++) {
num = num * 16 + ((str[i] >= '0' && str[i] <= '9') ? (str[i] - '0') : (str[i] - 'a' + 10));
}
} else { // 八进制
for (int i = 1; i < len; i++) {
num = num * 8 + (str[i] - '0');
}
}
} else if (str[0] == '0b' || str[0] == '0B') { // 二进制
for (int i = 2; i < len; i++) {
num = num * 2 + (str[i] - '0');
}
} else { // 十进制
for (int i = 0; i < len; i++) {
num = num * 10 + (str[i] - '0');
}
}
printf("%d\n", num);
return 0;
}
```
注意,上面代码中使用了C语言中的三元运算符,用于判断字符是否是十六进制中的字母a~f。