有人能解释一下这个吗?
问题描述:
输入两个数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