目录
问题简介:
给定一个整数Q(2<=Q<=10),一个非空字符串,以及另一个整数T(2<=T<=10), 编程要求过滤掉字符串中所有非Q进制数对应的字符组成一个新的字符串,该字符串无正负号,将该字符串表示的Q进制数转换为T进制数的字符串输出。
作者 C课程组-humin
单位 浙江大学
输入格式:
第一行输入一个整数Q, 代表Q进制(2<=Q<=10)
第二行输入以回车结束的一行非空字符串。
第三行输入一个整数T, 代表要转换成T进制
输出格式:
输出转换后的T进制数字符串。
输入样例:
10
15
2
输出样例:
1111
源代码:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
// 函数用于判断字符是否为 Q 进制数中的有效字符
int isValidChar(char c, int Q) {
if (c >= '0' && c <= '9') {
int digit = c - '0';
if (digit >= Q) {
return 0;
}
} else if (c >= 'A' && c <= 'Z') {
int digit = c - 'A' + 10;
if (digit >= Q) {
return 0;
}
}
return 1;
}
// 函数用于将 Q 进制数字符串转换为十进制数
int convertToDecimal(char *str, int Q) {
int decimal = 0;
int len = strlen(str);
for (int i = 0; i < len; i++) {
int digit;
if (str[i] >= '0' && str[i] <= '9') {
digit = str[i] - '0';
} else if (str[i] >= 'A' && str[i] <= 'Z') {
digit = str[i] - 'A' + 10;
}
decimal = decimal * Q + digit;
}
return decimal;
}
// 函数用于将十进制数转换为 T 进制数字符串
void convertToTBase(int decimal, int T) {
char result[100];
int index = 0;
while (decimal > 0) {
int remainder = decimal % T;
char digit;
if (remainder < 10) {
digit = '0' + remainder;
} else {
digit = 'A' + (remainder - 10);
}
result[index++] = digit;
decimal /= T;
}
// 逆序输出
for (int i = index - 1; i >= 0; i--) {
printf("%c", result[i]);
}
printf("\n");
}
int main() {
int Q, T;
char str[100];
// 读取输入
scanf("%d", &Q);
scanf("%s", str);
scanf("%d", &T);
// 过滤字符串中的无效字符
int len = strlen(str);
int index = 0;
for (int i = 0; i < len; i++) {
if (isValidChar(str[i], Q)) {
str[index++] = str[i];
}
}
str[index] = '\0';
// 将 Q 进制数字符串转换为十进制数
int decimal = convertToDecimal(str, Q);
// 将十进制数转换为 T 进制数字符串并输出
convertToTBase(decimal, T);
return 0;
}