进制转换
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define MAX 10
#define ADD 10
typedef int ElemType;
typedef struct SqStack{
ElemType *base;
ElemType *top;
int maxsizeof;
}SqStack;
//初始化
int InsiStack(SqStack &s)
{
s.base = (ElemType *)malloc(MAX * sizeof(ElemType));
if(!s.base)
{
printf("初始化失败\n");
return 0;
}
s.top = s.base;
s.maxsizeof = MAX;
return 1;
}
//判断
int PanStack(SqStack s)
{
if(s.base == s.top)
{
return 1;
}
else
{
return 0;
}
}
//插入
int InsearStack(SqStack &s,ElemType e)
{
if(s.top - s.base >= s.maxsizeof)
{
s.base = (ElemType *)realloc(s.base,(s.maxsizeof + ADD) * sizeof(ElemType));
if(!s.base)
{
printf("空间不足\n");
return 0;
}
s.top = s.base;
s.maxsizeof += ADD;
}
*s.top = e;
s.top ++;
return 1;
}
//出栈
int GetStack(SqStack &s,ElemType &e)
{
if(s.base == s.top)
{
printf("此为空栈\n");
return 0;
}
s.top --;
e = *s.top;
return 1;
}
//进制转换
int conStack(SqStack &s,int i,int n)
{
//printf("%d\n",i);
//int n;
int m;
ElemType e;
if(i == 1)
{
i = 2;
}
else if(i == 2)
{
i = 8;
}
else if(i == 3)
{
i = 16;
}
else
{
i = 10;
}
//printf("%d\n",i);
//printf("请输入一个十进制的数:");
//scanf("%d",&n);
m = n;
while(n)
{
InsearStack(s,n % i);
n = n / i;
}
printf("%d的%d进制:",m,i);
while(!PanStack(s))
{
GetStack(s,e);
printf("%d ",e);
}
printf("\n");
return 1;
}
int main()
{
SqStack s;
int choice;
int n;
int x;
int c;
int m;
if(InsiStack(s))
{
printf("初始化成功\n");
while(1)
{
printf("<<<<<该系统是进制转换>>>>>\n");
printf("请输入要转化的数的进制\n");
printf("1,二进制\n");
printf("2,8进制\n");
printf("3,16进制\n");
printf("4,十进制\n");
printf("5,退出系统\n");
printf("请输输入你的选择:");
scanf("%d",&choice);
if(choice == 5)
{
printf("欢迎下次使用\n");
break;
}
printf("请输入数字:");
scanf("%d",&n);
if(choice == 1)
{
c = 0;
m = 0;
while(n)
{
x = n % 10;
//printf("x = %d\n",x);
m += (x * pow(2,c));
c ++;
n = n / 10;
}
}
if(choice == 2)
{
c = 0;
m = 0;
while(n)
{
x = n % 10;
//printf("x = %d\n",x);
m += (x * pow(8,c));
c ++;
n = n / 10;
}
}
if(choice == 3)
{
c = 0;
m = 0;
while(n)
{
x = n % 10;
//printf("x = %d\n",x);
m += (x * pow(16,c));
c ++;
n = n / 10;
}
}
if(choice == 4)
{
c = 0;
m = 0;
while(n)
{
x = n % 10;
//printf("x = %d\n",x);
m += (x * pow(10,c));
c ++;
n = n / 10;
}
}
printf("转化的选择\n");
printf("1,转化成2进制\n");
printf("2,转化成8进制\n");
printf("3,转化成16进制\n");
printf("4,转化成10进制\n");
printf("5,退出系统\n");
printf("请输输入你的选择:");
scanf("%d",&choice);
if(choice == 5)
{
printf("欢迎下次使用\n");
break;
}
if(conStack(s,choice,m))
{
printf("转化成功\n");
}
}
}
}