日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

二进制转换为八进制-栈方式实现

發布時間:2025/3/15 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 二进制转换为八进制-栈方式实现 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 二進制轉換為八進制

二進制轉換為八進制

? 二進制轉換為八進制,需要使用兩個棧,一個棧用于存儲二進制數據,另一個棧用于存儲八進制數據。

? 每三個二進制數據代表一個八進制數據。因此,需要彈出三個二進制數據并將其轉換為對應的八進制,然后在將八進制數據壓棧。

/*********************************************************** @ 二進制轉換為八進制 * 二進制轉換為八進制,需要兩個棧來實現,一個棧用于存儲二進制數,* 另一個用于存儲八進制數,二進制的每三位代表八進制的一位,彈出二進制* 的三位將其轉換為八進制放入到八進制的棧中*********************************************************/#include <stdio.h> #include <stdlib.h> #include <math.h>#define STACK_INIT_SIZE 20 #define STACKINCREMENT 10typedef char ElemType; typedef struct {ElemType *base;ElemType *top;int stackSize; }sqStack;/*** @brief 初始化棧* @note * @param *s: 棧的地址* @retval None*/ void InitStack(sqStack *s);/*** @brief 壓棧操作* @note * @param *s: 棧的地址* @param e: 壓棧的數據* @retval None*/ void Push(sqStack *s, ElemType e);/*** @brief 出棧操作* @note * @param *s: 棧的地址* @param *e: 出棧的元素* @retval None*/ void Pop(sqStack *s, ElemType *e);/*** @brief 計算棧的長度* @note * @param s: 棧* @retval */ int StackLen(sqStack s);// 函數功能:初始化棧 // 參數*s:棧的地址 void InitStack(sqStack *s) {s->base = (ElemType *)malloc(STACK_INIT_SIZE * sizeof(ElemType));if( !s->base ){exit(0);}s->top = s->base;s->stackSize = STACK_INIT_SIZE; }// 函數功能:入棧操作 // 參數*s:棧的地址 // 參數e:待壓入棧的元素 void Push(sqStack *s, ElemType e) {if( s->top - s->base >= s->stackSize ){s->base = (ElemType *)realloc(s->base, (s->stackSize + STACKINCREMENT) * sizeof(ElemType));if( !s->base ){exit(0);}s->top = s->base + s->stackSize;s->stackSize = s->stackSize + STACKINCREMENT;}*(s->top) = e;s->top++; }// 函數功能:彈棧操作 // 參數*s:棧的地址 // 參數e:存放從棧里彈出的數據 void Pop(sqStack *s, ElemType *e) {if( s->top == s->base ){return;}*e = *--(s->top); }// 函數功能:計算棧s的當前長度 // 參數s:棧 int StackLen(sqStack s) {return (s.top - s.base); }int main() {ElemType c;sqStack s1;sqStack s2;int len, i, j, sum = 0;InitStack(&s1); // 初始化棧s1,用來存放二進制輸入printf("請輸入二進制數,輸入‘#’號表示結束!\n\n");scanf("%c", &c);while( c != '#' ){if( c=='0' || c=='1' ) // 檢查輸入是否二進制Push(&s1, c);scanf("%c", &c);}getchar(); // 把'\n'從緩沖區去掉len = StackLen(s1);printf("二進制棧的大小為: %d\n", len);InitStack(&s2); // 初始化棧s2,用來存放轉換的八進制for( i=0; i < len; i+=3 ){for( j=0; j < 3; j++ ){Pop( &s1, &c ); // 取出棧頂元素sum = sum + (c-48) * pow(2, j);if( s1.base == s1.top ){break;}}Push( &s2, sum+48 );sum = 0;}printf("\n轉化為八進制數是: ");while( s2.base != s2.top ){Pop( &s2, &c );printf("%c", c);}printf("(O)\n");return 0; } 與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的二进制转换为八进制-栈方式实现的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。