c语言写一段程序,可以进制转换(2,8,10,16进制),先输入2个数,代表从什么进制转换成什么进制,再输入需要转换的数,输出转换后的数
时间: 2024-11-13 13:26:59 浏览: 16
16进制浮点数转换为10进制VC代码
在C语言中,我们可以创建一个简单的程序来实现不同进制之间的转换。以下是一个示例程序,它允许用户输入原始数字、源进制、目标进制以及要转换的数值,然后将其转换为目标进制:
```c
#include <stdio.h>
#include <string.h>
// 函数定义,用于将字符串形式的数字转换为整数,考虑到多种进制
int atoi_custom(const char *str, int base) {
int result = 0;
int sign = 1;
if (strcmp(str, "0x") == 0) { // 如果以0x开头,表示十六进制
base = 16;
str += 2;
} else if (strcmp(str, "0b") == 0) { // 如果以0b开头,表示二进制
base = 2;
str += 2;
}
for (; isspace(*str); str++) {} // 跳过空格
if (*str == '-') { // 检查负数标志
sign = -1;
str++;
}
for (; *str != '\0'; str++) {
int digit;
if (base == 16 && isxdigit(*str)) {
digit = tolower(*str) - '0';
} else if (isdigit(*str)) {
digit = *str - '0';
} else if (base == 10) {
digit = *str - 'a' + 10; // 大写字母A-F相当于10-15
} else {
return 0; // 非法字符,退出函数
}
result = result * base + digit;
}
return result * sign;
}
int main() {
int from_base, to_base, number;
char input_str[100];
printf("请输入原数的进制(2, 8, 10, 或者 16): ");
scanf("%d", &from_base);
getchar(); // 清除上一行回车符的影响
printf("请输入目标的进制(同上): ");
scanf("%d", &to_base);
printf("请输入需要转换的数(例如:1A or 7F for hex, 1010 for binary): ");
fgets(input_str, sizeof(input_str), stdin);
input_str[strcspn(input_str, "\n")] = '\0'; // 移除换行符
number = atoi_custom(input_str, from_base); // 转换成十进制
if (number == 0) {
printf("无法识别输入的数字.\n");
} else {
printf("转换后的结果(%d进制到%d进制): %o\n", from_base, to_base, number);
printf("或者十六进制: %X\n", number);
}
return 0;
}
```
阅读全文