简单的利用栈 将二进制转换成八进制

来源:互联网 发布:照片解密软件 编辑:程序博客网 时间:2024/04/28 19:16

利用栈

将二进制数转换为八进制

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <math.h>
  4. struct mystack
  5. {
  6.     int *top;
  7.     int *base;
  8. };
  9. //栈的结构
  10. int main()
  11. {
  12.     mystack stack,result;
  13.     stack.top = (int *)malloc(2000*sizeof(int));
  14.     stack.base = stack.top;
  15.     result.top = (int *)malloc(2000*sizeof(int));
  16.     result.base = result.top;
  17.  
  18.     char c;
  19.     scanf("%c", &c);
  20.     while(c!='\n')
  21.     {
  22.         *stack.top = c - 48;
  23.         stack.top++;
  24.         scanf("%c", &c);
  25.     }
  26.  
  27.     int lenth = stack.top - stack.base;
  28.     int left = lenth % 3;//left表示当前二进制数%3之后剩下的数,进行单独处理
  29.     int temp = 0;        //用来存3位二进数转化成一个八进制数的结果
  30.  
  31.     for(int i = 0; i < (lenth - left) / 3; i++) //举例说明吧,比如1010  现在栈里的顺序是0101,把前三位取出来合成一位八进制数,剩下的最后一位单独处理
  32.     {
  33.         temp = 0;
  34.         stack.top--;
  35.         temp = *stack.top * 1;
  36.  
  37.         stack.top--;
  38.         temp += *stack.top * 2 ;
  39.  
  40.         stack.top--;
  41.         temp += *stack.top * 4 ;
  42.  
  43.         *result.top = temp; //将满足三位一转换的八进制数保存在结果栈中
  44.         result.top++;
  45.     }
  46.     temp = 0;
  47.     for(int i = 1;< left + 1; i++)
  48.     {
  49.  
  50.         stack.top--;
  51.         temp += *stack.top * i;//对剩下的二进制数单独处理,他肯定是小于等于两位的二进制数
  52.  
  53.  
  54.     }
  55.     if(left != 0)//如果说满足原来二进制数能够被三整除,说明不需要再往结果栈里面push数据了。
  56.     {
  57.         *result.top = temp;
  58.         result.top++;
  59.     }
  60.  
  61.     while(result.top != result.base)
  62.     {
  63.         result.top--;
  64.         printf("%d", *result.top);//输出结果栈
  65.     }
  66.     printf("\n");
  67.     return 0;
  68. }

欢迎来到我的IT 博客http://www.nightsong.cc

QQ:1623231307
0 0