题目:
利用栈,将十进制数字N转换为D进制(D=2,8,16),其中16进制对应的符号是0~9,A~F。
要求:十进制数字和N进制从键盘输入获得,从屏幕显示进制转换后的数字。文章来源:https://www.toymoban.com/news/detail-736785.html
代码:
#include <stdio.h>
#define StackSize 100
#define true 1
#define false 0
typedef int DataType;
typedef struct{
DataType data[StackSize];
int top;
}SeqStack;
typedef struct Node{
DataType data;
struct Node *next;
}*LinkStack;
//顺序栈初始化
void InitStack(SeqStack &S){
S.top=-1;
}
//判断顺序栈是否满
int StackEmpty(SeqStack &S){
if(S.top==-1){
return true;
}else{
return false;
}
}
//顺序栈进栈
int Push(SeqStack &S,DataType x){
if(S.top==StackSize-1){
return false;
}else{
S.top++;
S.data[S.top]=x;
return true;
}
}
//顺序栈出栈
int Pop(SeqStack &S,DataType &x){
if(S.top==-1){
return false;
}else{
x=S.data[S.top];
S.top--;
return true;
}
}
//顺序栈进制转换
void Conversion(){
int N,D,e;
SeqStack S;
InitStack(S);
printf("请输入要转换的十进制数字是:");
scanf("%d",&N);
printf("请输入要转换的进制是(2-9及16):");
scanf("%d",&D);
int num=N;
while(N){
Push(S,N%D);
N=N/D;
}
while(!StackEmpty(S)){
Pop(S,e);
if(e>9){
//十六进制
printf("%c",e+55);
}else{
printf("%d",e);
}
}
printf("\n");
}
//链式栈是否为空栈
int Empty2(LinkStack top){
if(top==NULL){
return true;
}
return false;
}
//链式栈进栈
int Push2(LinkStack *top,DataType x){
LinkStack s;
s=new Node;
if(s==NULL){
return false;
}else{
s->data=x;
s->next=(*top);
(*top)=s;
return true;
}
}
//链式栈出栈
int Pop2(LinkStack *top,DataType *x){
if(top!=NULL){
LinkStack p=(*top);
(*x)=(*top)->data;
(*top)=(*top)->next;
delete(p);
}
return false;
}
int main(){
while(1){
printf("请选择所需功能:\n");
printf("1、使用链栈转换\n");
printf("2、使用顺序栈转换\n");
printf("3、退出程序\n\n");
int number;
scanf("%d",&number);
if(number==1){
Conversion2();
}else if(number==2){
Conversion();
}else if(number==3){
break;
}else{
printf("输入有误!\n");
}
}
return 0;
}
效果图:
文章来源地址https://www.toymoban.com/news/detail-736785.html
到了这里,关于C语言实现任意栈之间的进制转换的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!