进制转换器(十进制转n进制)

时间:2023-03-09 14:19:34
进制转换器(十进制转n进制)
 #include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 100 /*链栈类型定义*/
typedef struct node
{
int data1[MAXSIZE];
int top;
}StackNode; /*队列类型定义*/
typedef struct point
{
int data2[MAXSIZE];
int frot, rear;
}LQueue; /*整数部分转换*/
void Push_LinkStack(StackNode *s,int z,int k)
{
int n;
while(z!=)
{
n=z%k;
z=z/k;
if(s->top==MAXSIZE-)
{
printf("栈满!");
return;
}
else
{
s->top++;
s->data1[s->top]=n;
}
} } /*小数部分转换*/
void In_LQueue(LQueue *q,float f,int k,int m)
{
int i,j;
f=f*k;
for(i=;i<m;i++)
{
j=(int)f;
if(q->rear==MAXSIZE-)
{
printf("队满!");
return;
}
else
{
q->rear++;
q->data2[q->rear]=j;
}
f=f-j;
f=f*k;
}
} void Output(StackNode *s,LQueue *q,int m)
{
int y,i;
int x,z;
if(s->top==-)
{
printf("栈空");
}
else
{
while(s->top!=-)
{
x=s->data1[s->top];
s->top--;
if(x<=)
{
printf("%d",x);
}
else
{
z=x-;
printf("%c",'A'+z);
}
}
}
printf(".");
while(q->frot!=q->rear)
{
q->frot++;
y=q->data2[q->frot];
if(y<=)
{
printf("%d",y);
}
else
{
i=y-;
printf("%c",'A'+i);
}
}
printf("\n");
} void menu()
{
printf("*********************\n");
printf("* 进制转化器 *\n");
printf("*1----------开始转换*\n");
printf("*0--------------退出*\n");
printf("*********************\n");
} int main()
{
StackNode *s;
s=(StackNode *)malloc(sizeof(StackNode));
s->top=-;
LQueue *q;
q=(LQueue *)malloc(sizeof(LQueue));
q->frot=-;
q->rear=-;
float n,f;
int k,sel,z,m;
do
{
menu();
printf("\n请输入你的选择:");
scanf("%d",&sel);
switch(sel)
{
case :printf("\n请输入一个十进制的非负小数:");
scanf("%f",&n);
printf("\n要将其转换成几进制数;\n");
printf("(2、8、16)\n");
printf("你的选择:");
scanf("%d",&k);
printf("\n结果需保留几位小数:");
scanf("%d",&m);
z=(int)n;
f=n-z;
Push_LinkStack(s,z,k);
In_LQueue(q,f,k,m);
Output(s,q,m);
}
}while(sel!=);
return ;
}