C语言编写程序:题目描述 输入一个数字,其进制数可能为以下四种形式: 二进制:以0b开头,包含字符0和1; 八进制:以0开头,包含字符0~7; 十进制:包含字符0-9,且除了自然数0以外的数字不以0开头; 十六进制:以0x开头,包含字符0~9和a~f。 请你将输入数字转换为十进制数字输出。 注意:若输入为0,我们认为它是十进制数,可直接输出0。 输入 输入一个数字,其进制为以上四种之一。以换行结尾。 输出 输出转换后的十进制数。
时间: 2023-11-27 17:54:11 浏览: 134
以下是C语言编写的程序实现:
```c
#include <stdio.h>
#include <string.h>
int main() {
char num[20]; // 存储输入的数字
scanf("%s", num);
int len = strlen(num);
int i, base = 1, dec = 0; // base为进制的权重,dec为转换后的十进制数
for (i = len - 1; i >= 0; i--) {
if (num[i] >= '0' && num[i] <= '9') {
dec += (num[i] - '0') * base;
base *= 10;
} else if (num[i] >= 'a' && num[i] <= 'f') {
dec += (num[i] - 'a' + 10) * base;
base *= 16;
} else if (num[i] == 'x' || num[i] == 'X') {
// 如果是十六进制的开头0x或0X,则跳过
break;
} else if (num[i] == 'b' || num[i] == 'B') {
// 如果是二进制的开头0b或0B,则跳过
break;
} else if (num[i] >= '0' && num[i] <= '7') {
dec += (num[i] - '0') * base;
base *= 8;
}
}
printf("%d\n", dec);
return 0;
}
```
程序的思路是:从右往左遍历输入的数字字符串,根据不同进制的特点,计算出相应的权重和数值,最终累加得到十进制数。
阅读全文