有人能解释一下这个吗?

有人能解释一下这个吗?

问题描述:

输入两个数m,n。将m转化为n进制数。(2<=n<=36) (0-9对应0-9;A-F对应10-35)
括号内的啥意思?谢谢????

n:进制限制,也就是说会从2进制到36进制出题
后面是说大于10的数字用什么表示,但是他这个范围和表示对不上,怀疑是你抄错了



#include <stdlib.h>
#include <conio.h>
#include <stdio.h>
#include <string.h>
#define size 100
//定义一个栈
typedef struct
{
    int x[size];
    int top;
} stack;
//栈初始化
void init(stack &p) { p.top = 0; }
//入栈
int push(stack &p, int &e)
{
    if (p.top < size)
    {
        p.x[p.top++] = e;
        return 1;
    }
    return 0;
}
//出栈
int pop(stack &p, int &e)
{
    if (p.top > 0)
    {
        e = p.x[--p.top];
        return 1;
    }
    return 0;
}
//将 n进制数据转化为十进制表示
void td(char s[], int n, int &num)
{
    char *p;
    int e;
    p = s;
    num = 0;
    while (*p)
    {
        if (*p >= 'A') // 16 进制转化
            e = *p - 'A' + 10;
        else
            e = *p - '0';
        p++;
        num = num * n + e;
    }
}
//将十进制转化为 m 进制
void tp(int num, int m, char s[])
{ //
    int n = 0, e;
    char *p;
    stack b;
    init(b);
    p = s;
    while (num)
    { //将十进制数据逐位分离 压入栈中 此时 数据为倒序
        n = num % m;
        if (n > 9)
            e = n - 10 + 'A';
        else
            e = n + '0';
        push(b, e);
        num /= m;
    }
    while (pop(b, e))
    { //从栈中取出元素,存入数组 s 中 此时 数据为顺序
        *p = e;
        p++;
    }
    *p = '\0'; //在数组 尾部加结束标志
}
int check(char s[], int n)
{
    char *p;
    p = s;
    if (n <= 10)
    {
        while (*p)
        {
            if (*p - '0' > n)
                return 1;
            p++;
        }
    }
    else if (n > 10)
    {
        while (*p)
        {
            if (*p >= 'A' && *p - 'A' + 10 > n)
                return 1;
            p++;
        }
    }
    return 0;
}
void trans(char s[], int n, int m)
{
    int *p, num;
    td(s, n, num);
    s[0] = '\0';
    tp(num, m, s);
}
int main()
{
    int n, m;
    char s[size], c;
    int fp = 1; //是否结束的标志
    do
    {
        puts("\t\t\t数据的各个进制之间的转化\n");
        s[0] = '\0'; //数组初始化
        printf("\n输入一个数据: ");
        gets(s); //读入数据 字符串型
        printf("\b输入原来的进制 和 要转化的进制, 如 10-2 : ");
        scanf("%d%c%d", &n, &c,
              &m); //读入 进制转化 由 n进制转化为 m进制 输入形式 如:10-2 16-2
        if (check(s, n))
        { //判断是否合法
            printf("\n\t错误 !输入的数据与进制不相配, 按任意键,继续输入。");
            getch();
        }
        else
        {
            printf("\n结果\n\t\t\t%d 进制 : %s ", n, s);
            trans(s, n, m);                             //转化
            printf("\n \t\t\t%d 进制 : %s \n\n", m, s); //输出 数据 字符串型
            printf("\t\t\t继续输入 1, 退出输入 0: ");
            scanf("%d", &fp);
        }
        c = getchar(); //读取 回车键
        system("cls");
    } while (fp);
    return 0;
}
v