TZOJ 1386 十转换转R进制

TZOJ 1386 十转换转R进制_第1张图片

答案:

#include
char fun(int n) 
{
    if (n >= 0 && n < 10)   //如果是小于10进制的
        return n + 48;     //ASCII值+48
    else if (n >= 10 && n <= 16)   //如果是大于10进制小于16进制的
        return n + 55;    //ASCII值+55
    else
        return 0;
}
int main() 
{
    int N=0, R=0,t=0,z=0;
    while (scanf("%d %d", &N, &R) != EOF)    
    {
        int a[100] = { 0 };
        int temp = 0;
        if (N > 0)   //如果是正数
        {
            temp = N;
        }
        else if (N < 0)  //如果是负数
        {
            temp = -N;    //取反变正数
        }
        else   //如果是0
        {
            printf("0\n");   //所有进制的0都是0
            continue;    //跳回开始
        }
        int i = 0;
        for (; temp != 0; i++)   //如果输入的不是0
        {
            a[i] = temp % R;   //除R取余法
            temp /= R;
        }
        char m[100] = { '\0' };
        for (t = i - 1, z = 0; t >= 0; t--, z++)    //将余数逆序
        {
            m[z] = fun(a[t]);
        }
        if (N < 0)   //负数加个符号
        {
            printf("-");
        }
        puts(m);   //打印N对应的R进制数
    }
    return 0;
}

你可能感兴趣的:(c语言)