利用栈实现十进制对二进制,八进制、十六进制的任意转换(N进制)

Myth丶恋晨 2022-03-25 08:52 307阅读 0赞

1、程序代码如下(利用栈的动态分配实现):

  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #define ERROR 0
  4. #define OK 1
  5. #define INITSIZE 10
  6. #define INCREMENT 2
  7. typedef int Status;
  8. typedef int Elemtype;
  9. typedef struct{
  10. Elemtype *base;
  11. Elemtype *top;
  12. int StackSize;
  13. }SqStack;
  14. Status InitStack(SqStack *S)
  15. {
  16. S->base=(Elemtype*)malloc(sizeof(Elemtype)*INITSIZE);
  17. if(!S->base)
  18. {
  19. return ERROR;
  20. }
  21. S->top=S->base;
  22. S->StackSize=INITSIZE;
  23. return OK;
  24. }
  25. Status PushStack(SqStack *S,Elemtype e)
  26. {
  27. if( S->top - S->base >= S->StackSize)
  28. {
  29. S->base=(Elemtype*)realloc(S->base,(S->StackSize+INCREMENT)*sizeof(Elemtype));
  30. if(!S->base)
  31. {
  32. return ERROR;
  33. }
  34. S->top = S->base+S->StackSize;
  35. S->StackSize+=INCREMENT;
  36. }
  37. *S->top=e;
  38. S->top++;
  39. return OK;
  40. }
  41. Status StackEmpty(SqStack *S)
  42. {
  43. if(S->top == S->base)
  44. {
  45. return OK;
  46. }
  47. return ERROR;
  48. }
  49. Status PopStack(SqStack *S,Elemtype *e)
  50. {
  51. if(S->top == S->base)
  52. {
  53. return ERROR;
  54. }
  55. *e=*--S->top;
  56. return OK;
  57. }
  58. void Fun_10_2_8_16(int number,int cet)
  59. {
  60. SqStack S;
  61. Elemtype e;
  62. InitStack(&S);
  63. if(number==0)
  64. {
  65. printf("转换后的%d进制数为:0",cet);
  66. return ;
  67. }
  68. while(number)
  69. {
  70. PushStack(&S,number%cet);
  71. number=number/cet;
  72. }
  73. printf("转换后的%d进制数为:",cet);
  74. while(!StackEmpty(&S))
  75. {
  76. PopStack(&S,&e);
  77. switch(e) //整型数转成字符输出
  78. {
  79. case 10:
  80. case 11:
  81. case 12:
  82. case 13:
  83. case 14:
  84. case 15: e+=55;break;
  85. default :e+=48;
  86. }
  87. printf("%c",e);
  88. }
  89. }
  90. int main()
  91. {
  92. int number,cet;
  93. printf("请输入要转换的十进制数:");
  94. scanf("%d",&number);
  95. printf("请输入要转换的数制:");
  96. scanf("%d",&cet);
  97. Fun_10_2_8_16(number,cet);
  98. return 0;
  99. }

2、运行截图:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

发表评论

表情:
评论列表 (有 0 条评论,307人围观)

还没有评论,来说两句吧...

相关阅读