龙之谷单机90级一键端:栈的进制互换

来源:百度文库 编辑:九乡新闻网 时间:2024/04/28 16:29:30
#include
#include
#include
#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;
 }
         }
 }