栈的应用-进制转换

使用栈来实现进制转换,栈的实现可以参考前面的.

// 数字转换为字符
int number_to_char(char n)
{
    if (n < 10)     // [0-9] -> ['0'-'9']
    {
        n += '0';
    }
    else if (n < 17)// [10-16] -> ['A'-'F']
    {
        n += 55;
    }

    return n;
}

// 进制转换
// 先把最低位依次入站,则栈顶就是最高位
// 然后所有元素都出栈就可以了
int conversion(int n, int base, char *buffer, size_t size)
{
    assert(buffer);
    assert((2==base) || (8==base) || (16==base));

    stack_t stack;
    stack_init(stack);

    do
    {
        // 把最低位转换为字符,放到栈里面
        stack_push(stack, number_to_char(n % base));
        n /= base;  // 去掉最低位
    } while (n != 0);

    n = 0;
    --size;
    while (n < size)
    {
        element_t e = 0;
        if (!stack_pop(stack, e))
        {
            break;
        }

        buffer[n] = (char)e;
        ++n;
    }
    buffer[n] = '\0';

    stack_destory(stack);
}

void test_conversion()
{
    char buffer_02[32];
    char buffer_08[32];
    char buffer_16[32];

    for (int i=0; i<32; ++i)
    {
        conversion(i,  2, buffer_02, sizeof(buffer_02));
        conversion(i,  8, buffer_08, sizeof(buffer_08));
        conversion(i, 16, buffer_16, sizeof(buffer_16));

        printf("%2d %10s%10s%10s\n", i, buffer_02, buffer_08, buffer_16);
    }
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值