#include <stdio.h>
#include <stdlib.h> #include <malloc.h> #define STACK_INIT_SIZE 100 #define STACKINCREMENT 10 typedef struct Stack{
int *base; int *top; int stacksize; }*SqStack; //申明部分 void InitStack(SqStack s)
{ s->base=(int *)malloc(STACK_INIT_SIZE *sizeof(int)); if(!s->base) exit(1); s->top=s->base; s->stacksize=STACK_INIT_SIZE; } //建立空栈 void Push(SqStack s,int e)
{ if(s->top-s->base>=s->stacksize) { s->base=(int *)realloc(s->base,(s->stacksize+STACKINCREMENT*sizeof(int))); if(!s->base) { printf("overflow!"); exit(1); } s->top=s->base+s->stacksize; s->stacksize+=STACKINCREMENT; } *s->top++=e; } //进栈 void Pop(SqStack s,int *e) { if(s->top==s->base) exit(1); *e=*--s->top; } int EmptyStack(SqStack s) { if(s->base==s->top) return 1; else return 0; } //出栈 void conversion2(SqStack s) //十到二进制 { int e; int n=-1; printf("输入要转换十进制的数字\n"); scanf("%d",&n); while(n) { Push(s,n%2); n=n/2; } while(!EmptyStack(s)) { Pop(s,&e); printf("%d ",e); } printf("\n"); } void conversion8(SqStack s) //十到八进制 { int e; int n=-1; printf("输入要转换的十进制数字\n"); scanf("%d",&n); while(n) { Push(s,n%8); n=n/8; } while(!EmptyStack(s)) { Pop(s,&e); printf("%d ",e); } printf("\n"); } void conversion16(SqStack s) //十到十六进制
{ char d; int e; int n=-1; printf("输入要转换的十进制数字\n"); scanf("%d",&n); while(n) { Push(s,n%16); n=n/16; } while(!EmptyStack(s)) { Pop(s,&e); switch(e) { case 0:e=0;printf("%d",e);break; case 1:e=1;printf("%d",e);break; case 2:e=2;printf("%d",e);break; case 3:e=3;printf("%d",e);break; case 4:e=4;printf("%d",e);break; case 5:e=5;printf("%d",e);break; case 6:e=6;printf("%d",e);break; case 7:e=7;printf("%d",e);break; case 8:e=8;printf("%d",e);break; case 9:e=9;printf("%d",e);break; case 10:d='a';printf("%c",d);break; case 11:d='b';printf("%c",d);break; case 12:d='c';printf("%c",d);break; case 13:d='d';printf("%c",d);break; case 14:d='e';printf("%c",d);break; case 15:d='f';printf("%c",d);break; } } printf("\n"); } void b_to_d() //换成十进制的二进制数
{int i,a[8]; long sum; printf("请输入你要转换成十进制的二进制数8位不够位前面补零\n"); for(i=0;i<8;i++) {scanf("%d",&a[i]); } sum=0; { sum=a[0]*2*2*2*2*2*2*2+a[1]*2*2*2*2*2*2+a[2]*2*2*2*2*2+a[3]*2*2*2*2+a[4]*2*2*2+a[5]*2*2+a[6]*2+a[7]; } printf("转换得十进制为%ld",sum); } void b_to_h(SqStack s) //换成十六进制的二进制数
{ char d; int i,a[8],e; int sum; printf("请输入你要转换成十六进制的二进制数8位不够位前面补零\n"); for(i=0;i<8;i++) {scanf("%d",&a[i]); } sum=0; sum=a[0]*2*2*2*2*2*2*2+a[1]*2*2*2*2*2*2+a[2]*2*2*2*2*2+a[3]*2*2*2*2+a[4]*2*2*2+a[5]*2*2+a[6]*2+a[7]; while(sum) { Push(s,sum%16); sum=sum/16; } while(!EmptyStack(s)) { Pop(s,&e); switch(e) { case 0:e=0;printf("%d",e);break; case 1:e=1;printf("%d",e);break; case 2:e=2;printf("%d",e);break; case 3:e=3;printf("%d",e);break; case 4:e=4;printf("%d",e);break; case 5:e=5;printf("%d",e);break; case 6:e=6;printf("%d",e);break; case 7:e=7;printf("%d",e);break; case 8:e=8;printf("%d",e);break; case 9:e=9;printf("%d",e);break; case 10:d='a';printf("%c",d);break; case 11:d='b';printf("%c",d);break; case 12:d='c';printf("%c",d);break; case 13:d='d';printf("%c",d);break; case 14:d='e';printf("%c",d);break; case 15:d='f';printf("%c",d);break; } } printf("\n"); } void b_to_o(SqStack s) //换成八进制的二进制数
{ int i,a[8],e; long sum; printf("请输入你要转换成八进制的二进制数8位不够位前面补零\n"); for(i=0;i<8;i++) {scanf("%d",&a[i]); } sum=0; sum=a[0]*2*2*2*2*2*2*2+a[1]*2*2*2*2*2*2+a[2]*2*2*2*2*2+a[3]*2*2*2*2+a[4]*2*2*2+a[5]*2*2+a[6]*2+a[7]; while(sum) { Push(s,sum%8); sum=sum/8; } while(!EmptyStack(s)) { Pop(s,&e); printf("%d ",e); } printf("\n"); } void o_to_d() //十进制的八进制数
{int i,a[8]; long sum; printf("请输入你要转换成十进制的八进制数8位不够位前面补零\n"); for(i=0;i<8;i++) {scanf("%d",&a[i]); } sum=0; { sum=a[0]*8*8*8*8*8*8*8+a[1]*8*8*8*8*8*8+a[2]*8*8*8*8*8+a[3]*8*8*8*8+a[4]*8*8*8+a[5]*8*8+a[6]*8+a[7]; } printf("转换得十进制为%ld",sum); } void o_to_h(SqStack s) //换成十六进制的八进制数 { char d; int i,a[8],e; long sum; printf("请输入你要转换成十六进制的八进制数8位不够位前面补零\n"); for(i=0;i<8;i++) {scanf("%d",&a[i]); } sum=0; sum=a[0]*8*8*8*8*8*8*8+a[1]*8*8*8*8*8*8+a[2]*8*8*8*8*8+a[3]*8*8*8*8+a[4]*8*8*8+a[5]*8*8+a[6]*8+a[7]; while(sum) { Push(s,sum%16); sum=sum/16; } while(!EmptyStack(s)) { Pop(s,&e); switch(e) { case 0:e=0;printf("%d",e);break; case 1:e=1;printf("%d",e);break; case 2:e=2;printf("%d",e);break; case 3:e=3;printf("%d",e);break; case 4:e=4;printf("%d",e);break; case 5:e=5;printf("%d",e);break; case 6:e=6;printf("%d",e);break; case 7:e=7;printf("%d",e);break; case 8:e=8;printf("%d",e);break; case 9:e=9;printf("%d",e);break; case 10:d='a';printf("%c",d);break; case 11:d='b';printf("%c",d);break; case 12:d='c';printf("%c",d);break; case 13:d='d';printf("%c",d);break; case 14:d='e';printf("%c",d);break; case 15:d='f';printf("%c",d);break; } } printf("\n"); } void o_to_b(SqStack s) //换成十六进制的八进制数 { int i,a[8],e; long sum; printf("请输入你要转换成十六进制的八进制数8位不够位前面补零\n"); for(i=0;i<8;i++) {scanf("%d",&a[i]); } sum=0; sum=a[0]*8*8*8*8*8*8*8+a[1]*8*8*8*8*8*8+a[2]*8*8*8*8*8+a[3]*8*8*8*8+a[4]*8*8*8+a[5]*8*8+a[6]*8+a[7]; while(sum) { Push(s,sum%2); sum=sum/2; } while(!EmptyStack(s)) { Pop(s,&e); printf("%d ",e); } printf("\n"); } void h_to_d() //换成十进制的十六进制数
{int i,a[8]; long sum; printf("请输入你要转换成十进制的十六进制数8位不够位前面补零\n"); printf("A到F写成对应十进制数\n"); for(i=0;i<8;i++) {scanf("%d",&a[i]); } sum=0; { sum=a[0]*16*16*16*16*16*16*16+a[1]*16*16*16*16*16*16+a[2]*16*16*16*16*16+a[3]*16*16*16*16+a[4]*16*16*16+a[5]*16*16+a[6]*16+a[7]; } printf("转换得十进制为%ld",sum); } void h_to_o(SqStack s) //转换成八进制的十六进制数
{
int i,a[8],e; long sum; printf("请输入你要转换成八进制的十六进制数8位不够位前面补零\n"); printf("A到F写成对应十进制数\n"); for(i=0;i<8;i++) {scanf("%d",&a[i]); } sum=0; sum=a[0]*16*16*16*16*16*16*16+a[1]*16*16*16*16*16*16+a[2]*16*16*16*16*16+a[3]*16*16*16*16+a[4]*16*16*16+a[5]*16*16+a[6]*16+a[7]; while(sum) { Push(s,sum%8); sum=sum/8; } while(!EmptyStack(s)) { Pop(s,&e); printf("%d ",e); } printf("\n"); } void h_to_b(SqStack s) //换成二进制的十六进制数 { int i,a[8],e; long sum; printf("请输入你要转换成二进制的十六进制数8位不够位前面补零\n"); printf("A到F写成对应十进制数\n"); for(i=0;i<8;i++) {scanf("%d",&a[i]); } sum=0; sum=a[0]*2*2*2*2*2*2*2+a[1]*2*2*2*2*2*2+a[2]*2*2*2*2*2+a[3]*2*2*2*2+a[4]*2*2*2+a[5]*2*2+a[6]*2+a[7]; while(sum) { Push(s,sum%2); sum=sum/2; } while(!EmptyStack(s)) { Pop(s,&e); printf("%d ",e); } printf("\n"); } int choose()
{int d; printf("请选择你要进行的进制的转换\n"); printf("如果是十进制转换为八进制请选1\n"); printf("如果是十进制转换为二进制请选2\n"); printf("如果是十进制转换为十六进制请选3\n"); printf("\n"); printf("如果是二进制转换为十进制请选4\n"); printf("如果是二进制转换为十六进制请选5\n"); printf("如果是二进制转换为八进制请选6\n"); printf("\n"); printf("如果是八进制转换为十六进制请选7\n"); printf("如果是八进制转换为十进制请选8\n"); printf("如果是八进制转换为二进制请选9\n"); printf("\n"); printf("如果是十六进制转换为十进制请选10\n"); printf("如果是十六进制转换为八进制请选11\n"); printf("如果是十六进制转换为二进制请选12\n"); scanf("%d",&d); return (d); } void main() { int f=0;SqStack s; while(!f) {s=(SqStack)(malloc(sizeof(Stack))); switch(choose()) {case 1: InitStack(s); conversion8(s); free(s->base); free(s); break; case 2: InitStack(s);
conversion2(s); free(s->base); free(s); break; case 3: InitStack(s);
conversion16(s); free(s->base); free(s); break; case 4: b_to_d();break;
case 5: InitStack(s);
b_to_h(s); free(s->base); free(s); break; case 6: InitStack(s);
b_to_o(s); free(s->base); free(s); break; case 7: InitStack(s);
o_to_h(s); free(s->base); free(s); break; case 8: o_to_d();break;
case 9: InitStack(s);
o_to_b(s); free(s->base); free(s); break; case 10: h_to_d();break;
case 11: InitStack(s);
h_to_o(s); free(s->base); free(s); break; case 12:InitStack(s);
h_to_b(s); free(s->base); free(s); break; default :f=1;
} } } |
|