C语言实现十进制转二,八,十六进制(栈的思想)

秒速五厘米 2023-07-20 12:23 18阅读 0赞

C语言实现十进制转二,八,十六进制(栈的思想)

  1. #include "stdio.h"
  2. #define StackSize 100 /*假定预分配的栈空间最多为100个元素*/
  3. typedef int DataType;/*假定栈元素的数据类型为整数*/
  4. typedef struct{
  5. DataType data[StackSize];
  6. int top;
  7. }SeqStack;
  8. /* 置栈空*/
  9. void Initial(SeqStack *S)
  10. {S->top=-1;}
  11. /*判栈空*/
  12. int IsEmpty(SeqStack *S)
  13. {return S->top==-1;}
  14. /*判栈满*/
  15. int IsFull(SeqStack *S)
  16. {return S->top==StackSize-1;}
  17. /*进栈*/
  18. void Push(SeqStack *S,DataType x)
  19. { if (IsFull(S))
  20. {
  21. printf("栈上溢"); /*上溢,退出运行*/
  22. exit(1);
  23. }
  24. S->data[++S->top]=x;/*栈顶指针加1后将x入栈*/
  25. }
  26. /*出栈*/
  27. DataType Pop(SeqStack *S)
  28. {
  29. if(IsEmpty(S))
  30. {
  31. printf("栈为空"); /*下溢,退出运行*/
  32. exit(1);
  33. }
  34. return S->data[S->top--];/*栈顶元素返回后将栈顶指针减1*/
  35. }
  36. /* 取栈顶元素*/
  37. DataType Top(SeqStack *S)
  38. {
  39. if(IsEmpty(S))
  40. {
  41. printf("栈为空"); /*下溢,退出运行*/
  42. exit(1);
  43. }
  44. return S->data[S->top];
  45. }
  46. void MultiBaseOutput (int N,int B)
  47. {/*假设N是非负的十进制整数,输出等值的B进制数*/
  48. int i;
  49. SeqStack S;
  50. Initial(&S);
  51. while(N){ /*从右向左产生B进制的各位数字,并将其进栈*/
  52. if(N%B>9)
  53. {
  54. i=55+N%B; //大写字母对应的ascll码
  55. Push(&S,i);
  56. }
  57. else
  58. Push(&S,N%B); /*将bi进栈0<=i<=j*/
  59. N=N/B;
  60. }
  61. while(!IsEmpty(&S)){ /*栈非空时退栈输出*/
  62. i=Pop(&S);
  63. if(i<=70&&i>=65) //大写A~F对应的ascll码
  64. printf("%c",i);
  65. else
  66. printf("%d",i);
  67. }
  68. }
  69. void main()
  70. {
  71. int a;
  72. printf("请输入十进制的数:");
  73. scanf("%d",&a);
  74. printf("二进制:");
  75. MultiBaseOutput(a,2);
  76. printf("\n");
  77. printf("八进制:");
  78. MultiBaseOutput(a,8);
  79. printf("\n");
  80. printf("十六进制:");
  81. MultiBaseOutput(a,16);
  82. printf("\n");
  83. }

发表评论

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

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

相关阅读

    相关 十六进制十进制C语言实现

    嘻嘻,用到了前几天学到的循环队列,认识到了数据结构的魅力。 将输入的数据入队后,再挨个出队,首先检查队列的前两个数据是否为‘0x’ 若是,再将其他数据出队,并且完成一系

    相关 (C语言)十六进制十进制

    问题描述 从键盘输入一个不超过8位的正的十六进制数字符串,将它转换为正的十进制数后输出。 注:十六进制数中的10~15分别用大写的英文字母A、B、C、D、E、F表示。