进制转换(栈的应用code)

进制转换,指的是将某一种进制的数转换为另一种进制的数表示。在计算机领域经常用到,二进制,十进制,十六进制之间的相互转换。

本文基于栈这一工具实现进制的转换,主要是因为在数学上,我们利用短除法来解决这一问题,先求得的余数在表达上放在最后,这种机制跟栈的机制很像。

首先我们先建立栈,并且保证其具有initial(),pop(),push(),is_empty()等基本操作。代码如下:

1.建立一个关于栈的结构体:

typedef struct stack {
    char* base;
    char* top;
    int lengrh;
}stack;

2.initial()等操作函数:

void initial_stack(int n, stack* s) {
    s->base = (char*)malloc(n * sizeof(char));
    s->lengrh = n;
    s->top = s->base;
}

void push_stack(char ch, stack* s) {
    if (s->top - s->base == s->lengrh)
    {
        printf("full");
        return;
    }
    *(s->top++) = ch;

void pop_stack(stack* s) {
    if (s->top == s->base)
    {
        printf("empty");
        return;
    }
    printf("%c ", *--s->top);
}

bool empty(stack* s) {
    if (s->base == s->top)
        return true;
    else return false;
}

void get_top(stack* s) {
    printf("%c ", *(s->top - 1));
}

void clearn_stack(stack* s) {
    if (s->base)
        free(s->base);
}

3.进制转换

void number_convert(stack* s, int value,int hex) {
    char digit[] = { '0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f' };
    do {
        push_stack(digit[value % hex], s);
    } while (value /= hex);

    while(empty(s)==false)
    { 
        pop_stack(s);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值