YTUOJ之十进制与八进制的转换(栈和队列)

题目描述

对于输入的任意一个非负十进制整数,利用栈打印输出与其等值的八进制数。

输入

111

输出

157

样例输入

148

样例输出

224

提示

来源

代码如下:

#include <iostream>
#include<stack>
using namespace std;

int main()
{
    stack<int> s;
    int n;
    while(cin>>n&&n>0)
    {
        stack<int> s;
        while(n>0)
        {
            int x = n%8;
            s.push(x);
            n/=8;
        }
        while(!s.empty())
        {
            cout<<s.top();
            s.pop();
        }
        cout<<endl;
    }
    return 0;
}





  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以使用顺序来实现十进制八进制之间的转换。具体实现方法如下: 1. 将十进制不断除以8,将余依次压入中,直到商为0为止。 2. 从顶开始弹出每个余,组成八进制。 以下是示例代码: ```c #include <stdio.h> #include <stdlib.h> #define STACK_INIT_SIZE 100 #define STACK_INCREMENT 10 typedef struct { int *base; int *top; int stack_size; } SqStack; void InitStack(SqStack *S) { S->base = (int *)malloc(STACK_INIT_SIZE * sizeof(int)); if (!S->base) exit(1); S->top = S->base; S->stack_size = STACK_INIT_SIZE; } void Push(SqStack *S, int e) { if (S->top - S->base >= S->stack_size) { S->base = (int *)realloc(S->base, (S->stack_size + STACK_INCREMENT) * sizeof(int)); if (!S->base) exit(1); S->top = S->base + S->stack_size; S->stack_size += STACK_INCREMENT; } *(S->top) = e; S->top++; } int Pop(SqStack *S) { if (S->top == S->base) exit(1); S->top--; return *(S->top); } void Conversion(int n) { SqStack S; InitStack(&S); while (n) { Push(&S, n % 8); n /= 8; } while (S.top != S.base) { printf("%d", Pop(&S)); } } int main() { int n; printf("请输入一个十进制:"); scanf("%d", &n); printf("转换八进制为:"); Conversion(n); printf("\n"); return 0; } ``` 如果需要实现八进制十进制,只需要将上述代码中的8改为10即可。 ### 回答2: 顺序是一种基于组实现的结构,可以用于实现十进制八进制之间的转换。 首先,我们可以通过顺序十进制转换八进制的过程如下: 1. 创建一个空的顺序。 2. 将十进制不断地除以8,依次将余压入顺序中,直到除为0。 3. 从顺序中依次弹出顶元素,即为转换后的八进制。 例如,将十进制123转换八进制的过程如下: 1. 创建一个空的顺序。 2. 将123不断地除以8,得到的余依次为3、1、7。 3. 将余3、1、7分别压入顺序中。 4. 弹出顺序中的顶元素,即得到转换后的八进制为731。 反之,通过顺序八进制转换十进制的过程如下: 1. 创建一个空的顺序。 2. 将八进制的每一位依次压入顺序中。 3. 从顺序中依次弹出顶元素,每弹出一个顶元素,将其乘以8的对应次幂,然后相加,即可得到转换后的十进制。 例如,将八进制731转换十进制的过程如下: 1. 创建一个空的顺序。 2. 将八进制的每一位7、3、1依次压入顺序中。 3. 弹出顺序中的顶元素7,乘以8的0次幂得到7。 4. 弹出顺序中的顶元素3,乘以8的1次幂得到24。 5. 弹出顺序中的顶元素1,乘以8的2次幂得到64。 6. 将7、24、64相加,即可得到转换后的十进制为95。 通过顺序的辅助,可以方便地实现十进制八进制之间的转换。 ### 回答3: 顺序是一种后进先出(LIFO)的数据结构,它在实现十进制八进制之间的转换时非常方便。 在十进制转换八进制的过程中,我们可以通过反复进行除8取余的操作,将余依次压入顺序中,直到商为0。最后,我们可以依次弹出中的元素,得到转换后的八进制。 而在八进制转换十进制的过程中,我们可以通过将八进制中的每一位乘以8的相应幂,再求和的方法进行转换。具体操作是将八进制从末尾开始,依次取出每一位乘以相应的8的幂,再相加得到转换后的十进制。 以十进制转换八进制为例,假设我们要将十进制42转换八进制。我们可以用序列42实现顺序,然后进行如下操作: 1. 将42除以8,得到商5余2。余2入。 2. 将5除以8,得到商0余5。余5入。 3. 商为0,结束转换。从中依次弹出元素,得到结果为52。 以八进制转换十进制为例,假设我们要将八进制52转换十进制。我们可以用序列52实现顺序,然后进行如下操作: 1. 依次从中弹出元素,得到5和2。 2. 5乘以8的1次幂得到40,2乘以8的0次幂得到2。 3. 将40和2相加得到42,得到转换后的十进制。 通过顺序,我们可以方便地实现十进制八进制之间的转换,只需进行简单的值计算和操作即可完成。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值