PTA - Q进制转换成T进制 (十以内任意进制转换)

7-12 Q进制转换成T进制 (20 分)

给定一个整数Q(2<=Q<=10),一个非空字符串,以及另一个整数T(2<=T<=10), 编程要求过滤掉字符串中所有非Q进制数对应的字符组成一个新的字符串,该字符串无正负号,将该字符串表示的Q进制数转换为T进制数的字符串输出。

输入格式:

第一行输入一个整数Q, 代表Q进制(2<=Q<=10)

第二行输入以回车结束的一行非空字符串。

第三行输入一个整数T, 代表要转换成T进制

输出格式:

输出转换后的T进制数字符串。

输入样例:

  10

  15

   2

输出样例:

   1111

解:

    这道题就是两步,第一步是一次读字符,如果不是Q进制数字符就跳过(要注意 Q 进制字符是 0 到 Q - 1,比如 5 进制就是0,1,2,3,4), 如果是就加到sum里。相当于在读完字符串的时候,Q进制数就已经转成十进制数 sum 了。第二步就是十进制数转 T 进制数,参考下图十进制转 2 进制的过程很容易写代码。(这道题由于 Q 和 T 都是 2 到 10 之间,所以不需要考虑更多的东西,会简单不少)。

扫描二维码关注公众号,回复: 4596941 查看本文章

#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))	// 其他字符都过滤掉,2进制可取值为0和1,没有2
            sum = sum * Q + (ch - '0');		      // sum为Q进制转为10进制
    if (sum == 0)
    {
        printf("0\n");
        return 0;
    }
    scanf("%d", &T);
    if (T == 10)    // 转成十进制的话直接输出就行
    {
        printf("%d\n", sum);
        return 0;
    }
    // 下面是10进制数sum转为T进制
    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;
}

猜你喜欢

转载自blog.csdn.net/Bob__yuan/article/details/84885040
今日推荐