把十进制数N转换成任意进制数d 下面程序的详细解析 数据结构课程设计要用

2024-11-19 03:33:59
推荐回答(2个)
回答1:

给你写注释了,看能否看得懂
#define MAXSIZE 100
#include
#include
struct stack //一个栈的结构
{
int data[MAXSIZE]; //数据部分
int top; //栈顶位置
};
void init(struct stack *s) //初始化一个空栈
{
s->top=-1; //将栈顶位置设为-1,表示栈为空
}
int empty(struct stack *s) //判断栈是否为空
{
if(s->top==-1) //如果栈顶位置 top 为-1,则为空,返回1
return 1;
else //否则不是空栈,返回0
return 0;
}
void push(struct stack *s,int i) //压栈函数
{
if(s->top==MAXSIZE-1) //如果超出MAXSIZE-1,则栈满,数据部分不能再大
{
printf("Stack is full\n");
return;
}
s->top++; //否则栈顶位置向后移一位
s->data[s->top]=i; //将元素 i 保存到数据部分
}
int pop(struct stack *s) //出栈
{
if(empty(s)) //如果栈为空,则返回错误
{
printf("stack is empty");
return -1;
}
return (s->data[s->top--]); //返回栈顶元素
}
void trans(int num,int jz) //将 num 按 jz 进制转换
{
struct stack s;
int k;
init(&s); //初始化空栈
while(num)
{
k=num%jz; //将 num 除以 jz 的余数保存到k
push(&s,k); //将 k 压进栈 s
num=num/jz; //num 除以 jz
}
while(!empty(&s)) //然后将栈 s 里面的元素一个个出栈,并打印出来
{
k=pop(&s);
if(k<10) //如果 k 小于 10 就打印数字
printf("%d",k);
else //如果 k 大于 10 就打印字母,例如,10表示为A
printf("%c",k+55);
}
printf("\n");
}
int main()
{
int num,jz;
// clrscr();
printf("此程序的功能是将十进制数X转化为Y进制输出.\n");
printf("请输入X和Y的值:(-1结束操作)");
scanf("%d%d",&num,&jz);
while(num!=-1)
{
trans(num,jz);
printf("请输入X和Y的值:");
scanf("%d",&num);
if(num==-1)
return(0);
scanf("%d",&jz);
}
return 0; //最好加个return 0;
}

回答2:

a