进制转换(Q进制转换成T进制)
给定一个整数Q(2<=Q<=10),一个非空字符串,以及另一个整数T(2<=T<=10), 编程要求过滤掉字符串中所有非Q进制数对应的字符组成一个新的字符串,该字符串无正负号,将该字符串表示的Q进制数转换为T进制数的字符串输出。
输入格式:
第一行输入一个整数Q, 代表Q进制(2<=Q<=10)
第二行输入以回车结束的一行非空字符串。
第三行输入一个整数T, 代表要转换成T进制
第一步,读入一个数代表Q进制字符,例如Q是5,则读入的就是0,1,2,3,4,(5进制最大能读到4),如果不符合则跳过。如果是就加到sum里。相当于在读完字符串的时候,Q进制数就已经转成十进制数 sum 了。
第二步,把十进制的sun转换为输入的T进制数。
代码实现:
#include <stdio.h>
int main() {
int Q, T, sum = 0;
scanf("%d", &Q);
getchar();
char ch;
while ((ch = getchar()) != '\n')
if (ch >= '0' && ch <= ('0' + Q - 1))
sum = sum * Q + (ch - '0');
if (sum == 0) {
printf("0\n");
return 0;
}
scanf("%d", &T);
if (T == 10) {
printf("%d\n", sum);
return 0;
}
int cur = 0, a[100000];
while (sum != 0) {
a[cur++] = sum % T;
sum /= T;
}
for (int i = cur - 1; i >= 0; i--)
printf("%d", a[i]);
return 0;
}
因为此题限制在2到10进制,所以当T=10时,直接输出sum即可。
否则将对T取余的数存入数组中最后输出。
运行结果: