#include #include #include // 函数:将单个字符转换为对应的数值 int charToVal(char c) { if (c >= '0' && c <= '9') return c - '0'; else if (c >= 'A' && c <= 'F') return c - 'A' + 10; else if (c >= 'a' && c <= 'f') return c - 'a' + 10; else return -1; // 非法字符 } // 函数:将数值转换为对应的字符 char valToChar(int val) { if (val >= 0 && val <= 9) return '0' + val; else return 'A' + val - 10; } // 函数:将字符串形式的数从fromBase进制转换为十进制 int convertToDecimal(char *num, int fromBase) { int len = strlen(num); int power = 1; // 表示当前位的权重 int numDecimal = 0; // 存放结果的十进制数 for (int i = len - 1; i >= 0; i--) { int val = charToVal(num[i]); if (val < 0 || val >= fromBase) { printf("输入错误: 你所输入的数 %c 不是 %d进制\n", num[i], fromBase); return -1; // 如果有非法字符,则返回 -1 } numDecimal += val * power; power *= fromBase; // 计算权重 } return numDecimal; } // 函数:将十进制数转换为toBase进制的字符串形式 void convertFromDecimal(int numDecimal, int toBase, char *result) { int index = 0; // 指示result数组中的当前位置 if (numDecimal == 0) { result[index++] = '0'; // 特例处理零 } while (numDecimal > 0) { int remainder = numDecimal % toBase; result[index++] = valToChar(remainder); numDecimal /= toBase; } result[index] = '\0'; // 添加字符串结束符 // 反转字符串 for (int i = 0; i < index / 2; i++) { char temp = result[i]; result[i] = result[index - i - 1]; result[index - i - 1] = temp; } } int main() { char num[20]; int fromBase, toBase; char result[20]; printf("请输入数字: "); scanf("%s", num); printf("请输入当前数字的进制(2 to 16): "); scanf("%d", &fromBase); printf("请输入您预期得到数字的进制(2 to 16): "); scanf("%d", &toBase); // 转换为十进制 int numDecimal = convertToDecimal(num, fromBase); if (numDecimal < 0) { return 1; // 如果转换出错则直接返回 } // 转换为目标进制 convertFromDecimal(numDecimal, toBase, result); printf("转化后的数字: %s\n", result); return 0; }