九度OJ 1118:数制转换 (进制转换)

来源:互联网 发布:韩信点兵 算法 vb 编辑:程序博客网 时间:2024/05/13 16:35

时间限制:1 秒

内存限制:32 兆

特殊判题:

提交:3873

解决:1494

题目描述:

    求任意两个不同进制非负整数的转换(2进制~16进制),所给整数在long所能表达的范围之内。
    不同进制的表示符号为(0,1,...,9,a,b,...,f)或者(0,1,...,9,A,B,...,F)。

输入:

    输入只有一行,包含三个整数a,n,b。a表示其后的n 是a进制整数,b表示欲将a进制整数n转换成b进制整数。a,b是十进制整数,2 =< a,b <= 16。

    数据可能存在包含前导零的情况。

输出:

    可能有多组测试数据,对于每组数据,输出包含一行,该行有一个整数为转换后的b进制数。输出时字母符号全部用大写表示,即(0,1,...,9,A,B,...,F)。

样例输入:
15 Aab3 7
样例输出:
210306
提示:

可以用字符串表示不同进制的整数。

来源:
2008年北京大学图形实验室计算机研究生机试真题

代码:

#include <stdio.h>#include <string.h>         #define N 12             int char2int(char c){           if (c >= '0' && c <= '9')        return (c - 48);    else    {           switch (c)         {           case 'a':        case 'A':            return 10;            break;        case 'b':        case 'B':            return 11;            break;        case 'c':        case 'C':            return 12;            break;        case 'd':        case 'D':            return 13;            break;        case 'e':         case 'E':             return 14;            break;        case 'f':        case 'F':            return 15;            break;         default:            return 0;        }       }       }                    char int2char(int i){    if (i >= 0 && i <= 9)        return (i + 48);    else    {        switch (i)        {        case 10:            return 'A';            break;        case 11:            return 'B';            break;        case 12:            return 'C';            break;        case 13:            return 'D';            break;        case 14:            return 'E';            break;        case 15:            return 'F';            break;        default:            return '0';        }    }}int main(void){    int a, b, n;    char na[N], nb[N];    int i;     while (scanf("%d%s%d", &a, na, &b) != EOF)    {        n = 0;        for (i=0; i<strlen(na); ++i)            n = n*a + char2int(na[i]);         i = 0;         do {            nb[i] = int2char(n%b);            i++;            n = n/b;        }while (n>0);        nb[i] = '\0';                     for (i=strlen(nb)-1; i>=0; --i)            printf("%c", nb[i]);        printf("\n");    }                    return 0;}                                        /**************************************************************    Problem: 1118    User: liangrx06    Language: C    Result: Accepted    Time:10 ms    Memory:912 kb****************************************************************/


0 0