利用栈的特性,将十进制数转换成八进制数

栈的特定是:先进后出

源程序:

//这个程序的目的是让用户输入一个十进制数,然后打出这个数的八进制数
#include<iostream>
using namespace std;
#define OK 1
#define ERROR 0
#define OVERFLOW -2
#define STACK_INIT_SIZE  200
#define STACKINCREMENT 10
typedef int SElemType;
typedef struct
{
SElemType *base;
SElemType *top;
int stackSize;


}SqStack;
int InitStack(SqStack *S)
{
S->base=(SElemType*)malloc(STACK_INIT_SIZE*sizeof(SElemType));
if(!S->base)
{
        return ERROR;
}
S->top=S->base;
S->stackSize=STACK_INIT_SIZE;
return OK;
}
int Push(SqStack *S,SElemType e)
{
if(S->top-S->base>=S->stackSize)
{
S->base=(SElemType *)realloc(S->base,(S->stackSize+STACKINCREMENT)*sizeof(SElemType));
if(!S->base)
exit(OVERFLOW);
S->top=S->base+S->stackSize;
S->stackSize=S->stackSize+STACKINCREMENT;


}
*(S->top++)=e;
return OK;
}
int Pop(SqStack *S,SElemType *x)
{
if(S->top==S->base)
return ERROR;
*x=*(--S->top);
return OK;
}
int stackEmpty(SqStack *S)
{
if(S->base==S->top)
return OK;
else
return ERROR;


}
void conversion()
{
int N;
cout<<"请输入一个非负整数:"<<endl;
cin>>N;
    SqStack S;
//构造一个空的栈
InitStack(&S);
while(N)
{
Push(&S,N%8);
N=N/8;
}
//然后从栈顶元素一个一个的将元素输出
    SElemType x;
cout<<"转换之后的八进制数: ";
while(!stackEmpty(&S))
{
Pop(&S,&x);
cout<<x;
}
cout<<endl;
}
int main()
{
conversion();
return 0;
}


  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 好的,这是一个进制转换的编程问题。以下是一个使用顺序实现的示例代码: ```python class Stack: def __init__(self): self.items = [] def push(self, item): self.items.append(item) def pop(self): return self.items.pop() def is_empty(self): return len(self.items) == 0 def convert_base(num, base): digits = "0123456789ABCDEF" stack = Stack() while num > 0: rem = num % base stack.push(rem) num = num // base new_num = "" while not stack.is_empty(): new_num += digits[stack.pop()] return new_num # 二进制十进制 num = "101010" base = 2 decimal = 0 for digit in num: decimal = decimal * base + int(digit) print(decimal) # 十进制二进制 num = 42 base = 2 binary = convert_base(num, base) print(binary) # 十进制八进制 num = 42 base = 8 octal = convert_base(num, base) print(octal) # 十进制六进制 num = 42 base = 16 hexadecimal = convert_base(num, base) print(hexadecimal) ``` 希望这个示例代码能够帮助你理解如何使用顺序实现进制转换。 ### 回答2: 利用顺序可以用来求各种进制之间的换。顺序是一种后进先出(LIFO)的据结构,可以通过入和出操作实现进制转换。 首先,我们来看二进制十进制。将二进制从最低位开始,逐位取出,然后乘以2的相应次幂,并将结果累加得到十进制。 接下来是二进制八进制。将二进制从最低位开始,将每3位二进制一组,转换成对应的八进制。 再来是二进制六进制。将二进制从最低位开始,将每4位二进制一组,转换成对应的六进制。 然后是十进制二进制。将十进制不断除以2,将余依次入,直到商为0。然后依次出得到二进制。 以上换过程都可以利用顺序来辅助实现中存储换后的结果,每次计算得到的位。最后按照出顺序组合起来,即得到换后的进制利用顺序进行进制转换可以简化计算过程,提高换效率。通过入、出操作和进制转换规则的结合,可以轻松实现各种进制之间的换。 ### 回答3: 利用顺序可以很方便地实现各种进制之间的换。 首先来看二进制十进制。我们可以从二进制的最低位开始,每次取出一个位,然后用2的幂次方乘以二进制位上的字,最后将这些乘积相加得到十进制。我们可以利用顺序将二进制从低位到高位依次入,然后出计算得到十进制。 接下来是二进制八进制六进制。与二进制十进制类似,我们可以按照每3位或4位为一组进行划分,将每组二进制化为对应的八进制六进制。再利用顺序将每组的结果入,最后将中的结果依次出,得到最终的八进制六进制。 最后是十进制二进制。我们可以使用除2取余的方法,将十进制不断除以2,每次取余并将余,直到商为0为止。然后将中的余依次出,得到最终的二进制。 通过使用顺序,我们可以方便地完成各种进制之间的换。顺序的先进后出的特性非常适合这一类问题的解决。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值