• 九度OJ 1080:进制转换 (进制转换)


    时间限制:1 秒

    内存限制:32 兆

    特殊判题:

    提交:4583

    解决:1076

    题目描述:

    将M进制的数X转换为N进制的数输出。

    输入:

    输入的第一行包括两个整数:M和N(2<=M,N<=36)。
    下面的一行输入一个数X,X是M进制的数,现在要求你将M进制的数X转换成N进制的数输出。

    输出:

    输出X的N进制表示的数。

    样例输入:
    16 10
    F
    样例输出:
    15
    提示:

    输入时字母部分为大写,输出时为小写,并且有大数据。

    来源:
    2008年清华大学计算机研究生机试真题

    思路:

    典型进制转换题,直接看代码就行。

    需要做一个字符转数字的函数。

    a-z分别代表10-35.


    代码:

    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
     
    #define M 1000
     
    int iszero(char s[M], int n)
    {
        for (int i=0; i<n; i++)
        {
            if(s[i] != '0')
                return 0;
        }
        return 1;
    }
     
    int ctoi(char c)
    {
        if ('A' <= c)
            return c-'A'+10;
        else
            return c-'0';
    }
     
    char itoc(int i)
    {
        if (10 <= i)
            return i-10+'A';
        else
            return i+'0';
    }
     
    int main(void)
    {
        int m, n, i, k, left, flag;
        char s1[M], s2[M];
        int len1;
     
        while (scanf("%d%d%s", &m, &n, s1) != EOF)
        {
            len1 = strlen(s1);
            k = 0;
            flag = 0;
            if (s1[0] == '-')
            {
                s1[0] = '0';
                flag = 1;
            }
            if (iszero(s1, strlen(s1)))
            {
                printf("0
    ");
                continue;
            }
            while (! iszero(s1, len1))
            {
                left = 0;
                for (i=0; i<len1; i++)
                {
                    int tmp = left*m+ctoi(s1[i]);
                    left = tmp%n;
                    s1[i] = itoc(tmp/n);
                }
                //printf("left=%d
    ", left);
                s2[k++] = itoc(left);
            }
            s2[k] = '';
            if (flag == 1)
                printf("-");
            for (i=strlen(s2)-1; i>=0; i--)
            {
                if ('A' <= s2[i])
                    s2[i] += 'a'-'A';
                printf("%c", s2[i]);
            }
            printf("
    ");
        }
     
        return 0;
    }
    /**************************************************************
        Problem: 1080
        User: liangrx06
        Language: C
        Result: Accepted
        Time:70 ms
        Memory:912 kb
    ****************************************************************/


    编程算法爱好者。
  • 相关阅读:
    第十三周学习进度条
    冲刺第四天
    第二天冲刺
    第三天冲刺
    第一天冲刺
    课下作业
    第十二周学习进度条
    课下作业
    webp与png、jpg相互转换
    Node疑难解决
  • 原文地址:https://www.cnblogs.com/liangrx06/p/5083952.html
Copyright © 2020-2023  润新知