zoukankan      html  css  js  c++  java
  • 九度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
    ****************************************************************/


    编程算法爱好者。
  • 相关阅读:
    noi 2011 noi嘉年华 动态规划
    最小乘积生成树
    noi 2009 二叉查找树 动态规划
    noi 2010 超级钢琴 划分树
    noi 2011 阿狸的打字机 AC自动机
    noi 2009 变换序列 贪心
    poj 3659 Cell Phone Network 动态规划
    noi 2010 航空管制 贪心
    IDEA14下配置SVN
    在SpringMVC框架下建立Web项目时web.xml到底该写些什么呢?
  • 原文地址:https://www.cnblogs.com/liangrx06/p/5083952.html
Copyright © 2011-2022 走看看