用棧方式實現十進制轉十六進制

用棧方式實現十進制轉十六進制:

 

  1. #include <stdio.h>
  2. #define SIZE 30
  3. typedef struct tag_stack
  4. {
  5.     char *top;
  6.     char *base;
  7.     int s_length;
  8.     int s_size;
  9. }*pStack;
  10. pStack initStack(void)
  11. {
  12.     pStack S = NULL;
  13.     S = (pStack)malloc(sizeof(struct tag_stack));
  14.     S->base = (char *)malloc(SIZE);
  15.     S->top = S->base;
  16.     S->s_length = 0;
  17.     S->s_size = SIZE;
  18.     return S;
  19. }
  20. void push(pStack S,char elem)
  21. {
  22.     *S->top++ = elem;
  23.     S->s_length++; 
  24. }
  25. char pop(pStack S)
  26. {
  27.     S->s_length--;
  28.     return *(--S->top);
  29.     
  30. }
  31. char mod_16(int x,int moder)
  32. {
  33.     int y = x%moder;
  34.     switch(y)
  35.     {
  36.         case 10:
  37.             return 'A';
  38.         case 11:
  39.             return 'B';
  40.         case 12:
  41.             return 'C';
  42.         case 13:
  43.             return 'D';
  44.         case 14:
  45.             return 'E';
  46.         case 15:
  47.             return 'F';
  48.         default:
  49.             return y+'0';
  50.     }
  51. }
  52. void to_16(int num,int moder)
  53. {
  54.     pStack statck_16 = initStack();
  55.     if( statck_16 == NULL || statck_16->base == NULL)
  56.     {
  57.         printf("error/n");
  58.         return
  59.     }
  60.     
  61.     while(num)
  62.     {
  63.         char c;
  64.         c = mod_16(num,moder);
  65.         push(statck_16,c);
  66.         num/=moder;
  67.     }
  68.     
  69.     push(statck_16,'x');push(statck_16,'0');
  70.     
  71.     while(statck_16->top != statck_16->base)
  72.     {
  73.         printf("%c",pop(statck_16));
  74.     }
  75.     printf("/n");
  76.     
  77.     free(statck_16->base);
  78.     free(statck_16);
  79.     statck_16 = NULL;
  80.     
  81. }
  82. int main(void)
  83. {
  84.     int num = 0;
  85.     printf("請輸入要進行轉化的數: ");
  86.     scanf("%d",&num);
  87.     to_16(num,16);  
  88.     return 0;
  89. }

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章