【數制轉換——堆疊】
- 1、描述:將非負的十進制數轉換成對應的進制
- 2、演算法基本思想(堆疊的思想)
- 3、演算法描述(C語言偽碼)
- 4、例題:將十進制數159轉換成八進制數
- 5、程式原始碼
- 6、除錯結果
1、描述:將非負的十進制數轉換成對應的進制
2、演算法基本思想(堆疊的思想)
1、構造一個空堆疊
2、當十進制數N非負時回圈執行:·N與要要轉換的進制數m所得的余數壓入堆疊中
·N更新為N與要轉換進制數m的商3、當堆疊非空時,回圈執行
·彈出堆疊頂元素
·輸出堆疊頂元素
3、演算法描述(C語言偽碼)
/*數值轉換操作*/
void Conversion(int N, int m)
{
InitStack(S);//初始化堆疊
while (N)
{
Push(S,N % m);//將m進制數壓入堆疊中
N = N / m;//更新N
}
while (S != NULL)
{
Pop(S,e);//出堆疊
printf("%d ", e);
}
}
4、例題:將十進制數159轉換成八進制數
5、程式原始碼
#include<stdio.h>
#define OK 1
#define ERROR 0
typedef int SElemType;
typedef int Status;
typedef struct StackNode
{
SElemType data;//資料域
struct StackNode* next;//指標域
}StackNode,*LinkStack;
/*空堆疊的初始化*/
Status InitStack(LinkStack& S)
{
S = NULL;
return OK;
}
/*入堆疊操作*/
Status Push(LinkStack& S, int e)
{
LinkStack p;
p = new StackNode;//開辟一個新結點
p->data = e;
p->next = S;
S = p;//更改堆疊頂指標
return OK;
}
/*出堆疊操作*/
Status Pop(LinkStack& S, SElemType& e)
{
LinkStack p;
if (S == NULL) return ERROR;//空堆疊
e = S->data;//將堆疊頂元素賦值給e
p = S;//p臨時存盤S的空間
S = S->next;//修改堆疊頂指標位置
delete p;//釋放空間
return OK;
}
/*數值轉換操作*/
void Conversion(int N, int m)
{
LinkStack S;
int e;
printf("十進制數%d轉換成%d進制數為:", N, m);
InitStack(S);//初始化堆疊
while (N)
{
Push(S,N % m);//將m進制數壓入堆疊中
N = N / m;//更新N
}
while (S != NULL)
{
Pop(S,e);//出堆疊
printf("%d ", e);
}
}
int main(void)
{
int N,m;
printf("請輸入要轉換的十進制數:");
scanf_s("%d", &N);
printf("請輸入要轉換成的進制數:");
scanf_s("%d", &m);
Conversion(N,m);//數制的轉換
printf("\n");
return 0;
}
6、除錯結果

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/202554.html
標籤:其他
上一篇:任正非:華為明年至少招8000名應屆生;蘋果開發 Google 搜索的替代;NumPy 1.19.3發布|極客頭條
下一篇:Docker之容器操作
