【问题描述】编写一个程序:将输入的一 个N进制路数转换成M进制数(N和M在2到16进制之间) 要求:N进制数和M进制数均以字符串方式存储。 【输入形式】输入的第一行、第二行分别表示N和M的值,第三行表示需要转换的数值k。 【输出形式】 输出的一行为K4换后的结果(超过10的数值依次用大写宇母ABCDEF表示,A表示11,B表示12,农次类推),若输入的进制数值不合法(如:N和M又有落在2到16之间,或数据含有指定进制的非法字符(如:N=2时,k为12)),输出"ilegal input”。
时间: 2023-04-05 08:01:25 浏览: 77
我可以回答这个问题。以下是程序的实现:
#include <stdio.h>
#include <string.h>
int charToInt(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 intToChar(int n) {
if (n >= 0 && n <= 9) {
return n + '0';
} else if (n >= 10 && n <= 15) {
return n - 10 + 'A';
} else {
return '\0';
}
}
int main() {
int n, m;
char k[100];
scanf("%d%d%s", &n, &m, k);
int len = strlen(k);
int num = 0;
for (int i = 0; i < len; i++) {
int digit = charToInt(k[i]);
if (digit < 0 || digit >= n) {
printf("ilegal input");
return 0;
}
num = num * n + digit;
}
char result[100];
int pos = 0;
while (num > 0) {
int digit = num % m;
result[pos++] = intToChar(digit);
num /= m;
}
if (pos == 0) {
result[pos++] = '0';
}
for (int i = pos - 1; i >= 0; i--) {
printf("%c", result[i]);
}
return 0;
}
阅读全文