作者在 2022-11-20 11:47:51 发布以下内容
#include<iostream>
#include<malloc.h>
#include<stdio.h>
#define STACKINITSIZE 100
#define STACKINCREMEMT 10
using namespace std;
typedef struct{
int *base; //动态存储空间的基地址,栈底
int *top; //栈顶指针,指向真实栈元素的下一个位置
int stacksize;
}Sqstack;
void InitStack(Sqstack &S){ //创建动态空间
S.base = (int *)malloc(STACKINITSIZE * sizeof(int));
S.top = S.base;
S.stacksize = STACKINITSIZE;
}
int StackNull(Sqstack &S){ //判断栈是否为空
if(S.base == S.top){
return 0;
}else{
return 1;
}
}
int StackFull(Sqstack &S){//判断栈是否满栈
if(S.top - S.base == S.stacksize){
return 0;
}else{
return 1;
}
}
void push(Sqstack &S,int e){//入栈
if(StackFull(S) == 0){
S.base = (int *)realloc(S.base,(S.stacksize +STACKINCREMEMT) * sizeof(int));
S.top = S.base + S.stacksize;
S.stacksize += STACKINCREMEMT;
}
*S.top = e;
S.top++;
}
int pop(Sqstack &S){//出栈
S.top--;
int e = *S.top;
return e;
}
void conversion_16(Sqstack &S,int a){//10进制转16进制
int y=0;
int s;
int e;
InitStack(S);
cout<<a<<"的16进制表示:";
if(a==0)
{
cout<<0;
}
while(a>0)
{
y=a%16;
if(y<10){
s=int('0'+y);
}else{
s=int('A'-10+y);
}
a=a/16;
push(S,s);
}
while(StackNull(S) == 1){
e = pop(S);
cout<<char(e);
}
cout<<endl;
}
void conversion_8(Sqstack &S,int n){//10进制转8进制
int e;
InitStack(S);
cout<<n<<"的8进制表示:";
while(n){
push(S,n%8);
n = n/8;
}
while(StackNull(S) == 1){
e = pop(S);
cout<<e;
}
cout<<endl;
}
void conversion_2(Sqstack &S,int n){//10进制转2进制
int e;
InitStack(S);
cout<<n<<"的2进制表示:";
while(n){
push(S,n%2);
n = n/2;
}
while(StackNull(S) == 1){
e = pop(S);
cout<<e;
}
cout<<endl;
} //10进制转8进制
int main()
{
Sqstack S;
int n;
int choose=0;
cout<<"请输入一位10进制数字"<<endl;
cin>>n;
cout<<"请输入你要转换的进制"<<endl;
int a=0;
cin>>a;
choose=a;
switch(choose)
{
case'2':
{conversion_2(S, n);}
break;
case'8':
{conversion_8(S, n);}
break;
case'16':
{conversion_16(S,n);}
break;}
getchar();
getchar();
getchar();
return 0;
}
#include<malloc.h>
#include<stdio.h>
#define STACKINITSIZE 100
#define STACKINCREMEMT 10
using namespace std;
typedef struct{
int *base; //动态存储空间的基地址,栈底
int *top; //栈顶指针,指向真实栈元素的下一个位置
int stacksize;
}Sqstack;
void InitStack(Sqstack &S){ //创建动态空间
S.base = (int *)malloc(STACKINITSIZE * sizeof(int));
S.top = S.base;
S.stacksize = STACKINITSIZE;
}
int StackNull(Sqstack &S){ //判断栈是否为空
if(S.base == S.top){
return 0;
}else{
return 1;
}
}
int StackFull(Sqstack &S){//判断栈是否满栈
if(S.top - S.base == S.stacksize){
return 0;
}else{
return 1;
}
}
void push(Sqstack &S,int e){//入栈
if(StackFull(S) == 0){
S.base = (int *)realloc(S.base,(S.stacksize +STACKINCREMEMT) * sizeof(int));
S.top = S.base + S.stacksize;
S.stacksize += STACKINCREMEMT;
}
*S.top = e;
S.top++;
}
int pop(Sqstack &S){//出栈
S.top--;
int e = *S.top;
return e;
}
void conversion_16(Sqstack &S,int a){//10进制转16进制
int y=0;
int s;
int e;
InitStack(S);
cout<<a<<"的16进制表示:";
if(a==0)
{
cout<<0;
}
while(a>0)
{
y=a%16;
if(y<10){
s=int('0'+y);
}else{
s=int('A'-10+y);
}
a=a/16;
push(S,s);
}
while(StackNull(S) == 1){
e = pop(S);
cout<<char(e);
}
cout<<endl;
}
void conversion_8(Sqstack &S,int n){//10进制转8进制
int e;
InitStack(S);
cout<<n<<"的8进制表示:";
while(n){
push(S,n%8);
n = n/8;
}
while(StackNull(S) == 1){
e = pop(S);
cout<<e;
}
cout<<endl;
}
void conversion_2(Sqstack &S,int n){//10进制转2进制
int e;
InitStack(S);
cout<<n<<"的2进制表示:";
while(n){
push(S,n%2);
n = n/2;
}
while(StackNull(S) == 1){
e = pop(S);
cout<<e;
}
cout<<endl;
} //10进制转8进制
int main()
{
Sqstack S;
int n;
int choose=0;
cout<<"请输入一位10进制数字"<<endl;
cin>>n;
cout<<"请输入你要转换的进制"<<endl;
int a=0;
cin>>a;
choose=a;
switch(choose)
{
case'2':
{conversion_2(S, n);}
break;
case'8':
{conversion_8(S, n);}
break;
case'16':
{conversion_16(S,n);}
break;}
getchar();
getchar();
getchar();
return 0;
}