在計算機進製轉換的時候,最常用的就是二進位制,八進位制,十進位制,和十六進製制,以及它們之間的轉換。而在現實生活中最常用的十進位制數是我們一貫的作風。在計算機系統最常用的是二進位制,十六進製制,八進位制。
在上一次使用順序棧實現進製轉換的時候,一直在考慮十六進製制的問題,最終也沒有實現,就收手了。過了一天,再次嘗試著看**,也問了好多的同學,都不會,他們所做的只是進行十進位制以下的進製轉換,我考慮的十六進製制沒有人解釋。白天一直在想是**出錯了,輸出的結果為什麼會多出多餘的數字,知道問題出在進製轉換函式,而且在出棧的輸出問題上,嘗試了幾次switch語句,還是一樣的結果。再次嘗試if語句,還是一樣的結果,這就說明肯定在出棧的輸出有了問題,下午在看資料結構的知識,又嘗試了一遍還是使用switch語句實現輸出,採用最笨的方法輸出,不再最簡單的簡化**,最後終於實現了十六進製制的轉換,也是一次**除錯的能力考驗。
下面是錯的轉換函式**:
問題就出現在cout<//進製轉換函式
void conversion(int n,int r)
while(!stackempty(s))
cout<
下面的是自己今天所修改的**:
去掉cout<//進製轉換函式
void conversion(int n,int r)
while(!stackempty(s))
}cout<
完整的順序棧實現進製轉換的**為:
輸入的十進位制數為255,分別轉換為二進位制數,八進位制數,十六進製制數#include using namespace std;
//兩個c語言的標頭檔案庫
#include #include //以下是巨集定義
#define ok 1
#define errow 0
#define overflow -2
#define true 1
#define false 0
#define infeasible -1
#define stack_init_size 100//儲存空間初始分配量
#define stackincrement 10//儲存空間分配增量
//以下是型別重新定義
typedef int selemtype;//重新定義selemtype為int型
typedef int status;//重新定義status為int型
//下面的是棧的定義和基本操作
typedef structsqstack;
//1構造乙個空棧
status initstack(sqstack &s)
s.top=s.base;
s.stacksize=stack_init_size;
return ok;
}//2判斷棧是否為空
status stackempty(sqstack s)
else }
//7出棧
status pop(sqstack &s,selemtype &e)
e=*--s.top;
return ok;
}//8進棧
status push(sqstack &s,selemtype e)
s.base=newbase;
s.top=s.base+s.stacksize;
s.stacksize+=stackincrement;
} *s.top++=e;
return ok;
}//進製轉換函式
void conversion(int n,int r)
while(!stackempty(s))
}cout<>n1;
cout<
cin>>r1;
conversion(n1,r1);//呼叫進製轉換函式
return 0;
}
輸出的結果為:
二進位制結果:
八進位制結果:
十六進製制結果:
DS之棧實現數制轉換
要想實現對於乙個非負十進位制整數轉換為不大於十進位制的數的方法有很多,其中乙個基於棧的先進後出的固有特性實現的。在進行進製轉換的過程中,由於基於公式 n n div d d n mod d 其中 div為整除運算,mod為求餘運算 的計算過程是從低位到高位順序產生所要轉換進製數的各個數字,而輸出的時...
順序棧實現數制轉換
include include define stacksize 100 假定預分配的棧空間最多為100個元素 typedef int datatype 應將順序棧的datatype定義改為整型 typedef struct seqstack void main void initstack seq...
Python棧實現數制轉換
數值轉換的原理是整除取餘,但是計算得出的順序和輸出的順序是相反的 即先算出的結果在最低位,此時就需要使用棧來儲存運算結果 def transform x int a int 輸入要轉換的數字以及目標進製輸出轉換後的字串 param x 要轉換的數字 param a 進製 return 字串 asse...