进制转换器(十进制转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!=0)
    {
        n=z%k;
        z=z/k;
        if(s->top==MAXSIZE-1)
        {
            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=0;i<m;i++)
    {
        j=(int)f;
        if(q->rear==MAXSIZE-1)
        {
            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==-1)
    {
        printf("栈空");
    }
    else
    {
        while(s->top!=-1)
        {
            x=s->data1[s->top];
            s->top--;
            if(x<=9)
            {
                printf("%d",x);
            }
            else
            {
                z=x-10;
                printf("%c",'A'+z);
            }
        }
    }
    printf(".");
    while(q->frot!=q->rear)
    {
        q->frot++;
        y=q->data2[q->frot];
        if(y<=9)
        {
            printf("%d",y);
        }
        else
        {
            i=y-10;
            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=-1;
    LQueue *q;
    q=(LQueue *)malloc(sizeof(LQueue));
    q->frot=-1;
    q->rear=-1;
    float n,f;
    int k,sel,z,m;
    do
    {
        menu();
        printf("\n请输入你的选择:");
        scanf("%d",&sel);
        switch(sel)
        {
            case 1: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!=0);
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值