版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hhy2014yatan/article/details/46922591
#include<stdio.h>
#include<stdlib.h>
#define SIZE 100
#define ADDSIZE 10
#define ERROR 0
#define OK 1
typedef struct{
int *base;
int *top;
int stacksize;
}sqstack;
int Initstack(sqstack &s);
int push(sqstack &s, int e);
int pop(sqstack &s,int &e);
int stackempty(sqstack &s);
void conversion(int n,int m);
int main()
{
sqstack s;
Initstack(s);
int N;
printf("......进制转换......\n\n");
while(scanf("%d",&N)!=0)
{printf("以下为转化结果:\n\n");
if(N==0)
return ERROR;
else
{
printf("您转化的二进制是:");
conversion(N,2);
printf("您转化的八进制是:");
conversion(N,8);
printf("您转化的十六进制是:");
conversion(N,16);
}
}
return OK;
}
int Initstack(sqstack &s)
{
s.base = (int *)malloc(SIZE * sizeof(int));
if(!s.base) return ERROR;
s.top = s.base;
s.stacksize = SIZE;
return OK;
}
int push(sqstack &s, int e)
{
if(s.top - s.base >= s.stacksize)
{
s.base = (int *) realloc(s.base, (s.stacksize + ADDSIZE) * sizeof(int));
if(!s.base)
return ERROR;
s.top = s.base + s.stacksize;
s.stacksize += ADDSIZE;
}
*s.top++ = e;
return OK;
}
int pop(sqstack &s,int &e)
{
if(s.top == s.base)
return ERROR;
e = * --s.top;
return OK;
}
int stackempty(sqstack &s)
{
if(s.base == s.top)
return OK;
else
return ERROR;
}
void conversion(int n,int m)
{
int e;
sqstack s;
Initstack(s);
while(n)
{
push(s,n%m);
n=n/m;
}
while(!stackempty(s))
{
pop(s,e);
if(e>9)
printf("%c",'A' + e - 10);
else
printf("%d",e);
}
printf("\n");
}
#include<stdlib.h>
#define SIZE 100
#define ADDSIZE 10
#define ERROR 0
#define OK 1
typedef struct{
int *base;
int *top;
int stacksize;
}sqstack;
int Initstack(sqstack &s);
int push(sqstack &s, int e);
int pop(sqstack &s,int &e);
int stackempty(sqstack &s);
void conversion(int n,int m);
int main()
{
sqstack s;
Initstack(s);
int N;
printf("......进制转换......\n\n");
while(scanf("%d",&N)!=0)
{printf("以下为转化结果:\n\n");
if(N==0)
return ERROR;
else
{
printf("您转化的二进制是:");
conversion(N,2);
printf("您转化的八进制是:");
conversion(N,8);
printf("您转化的十六进制是:");
conversion(N,16);
}
}
return OK;
}
int Initstack(sqstack &s)
{
s.base = (int *)malloc(SIZE * sizeof(int));
if(!s.base) return ERROR;
s.top = s.base;
s.stacksize = SIZE;
return OK;
}
int push(sqstack &s, int e)
{
if(s.top - s.base >= s.stacksize)
{
s.base = (int *) realloc(s.base, (s.stacksize + ADDSIZE) * sizeof(int));
if(!s.base)
return ERROR;
s.top = s.base + s.stacksize;
s.stacksize += ADDSIZE;
}
*s.top++ = e;
return OK;
}
int pop(sqstack &s,int &e)
{
if(s.top == s.base)
return ERROR;
e = * --s.top;
return OK;
}
int stackempty(sqstack &s)
{
if(s.base == s.top)
return OK;
else
return ERROR;
}
void conversion(int n,int m)
{
int e;
sqstack s;
Initstack(s);
while(n)
{
push(s,n%m);
n=n/m;
}
while(!stackempty(s))
{
pop(s,e);
if(e>9)
printf("%c",'A' + e - 10);
else
printf("%d",e);
}
printf("\n");
}