二進位制轉換我們應該都不會陌生,在二進位制,八進位制,十六進製制之間相互轉換在底層應用中,加密的演算法中,還是需要我們掌握的。這次進製的轉換思想:輾轉相除法。將十進位制的數字輾轉相除所需要轉換的數值直到結果為0,將餘數倒過來排序即可得到所需要的與原來數值等值的某進製數值。
比如:100轉換為2進製
100/2=50 餘數0
50/2=25 餘數0
25/2=12 餘數1
12/2=6 餘數0
6/2=3 餘數0
3/2=1 餘數1
1/2=0(結果為0,結束相除) 餘數1
所以100用二進位制表示就是:1100100
假如我們用陣列來儲存所得到的餘數,那麼我們在進行結果輸出的時候將變鎝比較麻煩,因為我們需要從陣列儲存的餘數的最後一位開始輸出,要這樣做,我們就必須要知道我們的輾轉相除結果得到了多少位餘數,然後確定陣列的下標,從該下標開始倒序輸出得到我們需要的結果。
這時,我們的棧的優良型就凸顯出來了,因為我們的棧有元素後進先出的特點,那麼我們就只需把相除得到的餘數入棧,需要輸出結果時出棧就可以了,有木有覺得很方便咧
下面,就來一起完成吧!
棧的類模板:
#pragma once
#include
using
namespace
std;
const
int maxsize = 100; //陣列最大值
template
class stack ;
template
stack::stack()
template
stack::~stack()
template
bool stack::empty()
template
bool stack::full()
template
bool stack::enstack(t x)
top++;
data[top] = x;
return
true;
}template
bool stack::pop()
top--;
return
true;
}template
bool stack::gettop(t &element)
return
false;
}
二進位制的轉換簡單法及簡單測試:
#include#include"stack.h"
using namespace std;
/********棧的應用:進製的轉換 ***********/
/********原理:進製轉換的時候利用輾轉相除法,依次將取餘所得的數字
然後需要取出來的時候就從棧頂中乙個個取出來
取出來的時候就剛好是順序了
********/
#define binary 2
//轉換成2進製
#define octonary 8
//轉換成8進製
#define hexadectmal 16
//轉換成16進製制
int main()
int elem=0; //取出棧頂元素的中間值
while (!p->empty())
delete p; //歸還空間
p = null; //歸還空間
return
0;}
呼叫結果:(2017轉換位二進位制)
就這樣,我們就利用棧實現了乙個比陣列實現方法簡單的二進位制轉換的小例子。
有一點要說的是,這裡我們用的是順序棧來實現的,當然我們也可以用鏈棧來實現(看具體環境的需要吧)
以上所說的難免有錯漏,如有錯誤,還望不吝賜教,及時指出,謝謝
二進位制的轉換
學計算機的朋友剛開始學習時都要接觸進製之間的轉換,二進位制 十進位制 八進位制 十六進製制等,這個是很枯燥的,轉來轉去就轉矇圈了,別蒙別蒙,今天咱們乙個乙個搞定,看看二進位制和十進位制之間如何相互轉換的。這個演算法時間複雜度是o 1 沒想到吧!我想到的演算法是,將n一直除2直到n變為0,如果途 現餘...
二進位制轉換
e.g 二進位制轉換為八進位制 e.g 求10111001的八進位制 三位三位擷取,分解為 10 111 001 001 2的0次 1 111 2的0次 2的1次 2的2次 7 10 2的0次 2的1次 2 所以,八進位制為271 二進位制轉換為十六進製制 e.g 求10111001的十六進製制 四...
二進位制轉換
負整數小數 負小數十進位制 2的次冪 二進位制1 200001221 0010 321 20 0011422 0100 522 20 0101 622 21 0110 722 21 20 0111823 1000 比如 100轉成二進位制 1,轉成2的次冪 100 26 25 22 2,0000 0...