数制转换

案例分析

将一个十进制数N转换为8进制数时,在计算过程中,把N与8求余得到的八进制数的各位一次进栈,计算完毕后将栈中的八进制数的各位一次出栈输出,输出结果就是带球的八进制数。

案例实现

在具体实现时,站可以采用顺序存储并表示也可采用i链式存储表示。

算法步骤

1、初始化一个空栈S
2、当十进制数N非零时,循环执行以下操作:
①把N与8求余得到的八进制数压入栈S
②N更新为N与8的商
3、当栈s非空时,循环执行以下操作:
①弹出栈顶元素
②输出e

算法思想

十进制数N转换为D进制数

N = ( N d i v D ) ∗ D + N m o d D N = (N div D) *D + N mod D N=(NdivD)D+NmodD (其中,div为整除运算,mod为求与运算)

算法描述

//采用顺序栈实现数制转换(八进制)
void conversion (int n) {
    InitStack (N);              //初始化空栈S
    while (N) {
        Push(S,N%8);            //把N与8求余得到的八进制数压入栈S
        N=N/8;                  //N更新为N与8的商
    }
    while (!StackEmpty(s)) {
        Pop(S.e);               //弹出栈顶元素
        cout<<e<<endl;          //输出e
    }
}       

算法分析

算法的时间复杂度为O( l o g 8 n log_8n log8n)。

宅这个例子中,栈的操是单调的,即先一昧地入栈,然后一昧的出栈。上述问题用数组也可以实现,但是就顺序栈而言,简化了程序设计的问题,划分了不同的关注层次,使思考范围缩小了。而数组不仅掩盖了事情的本质,还要分散精力取考虑数组下标增减等细节问题。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值