国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

棧的應(yīng)用實例之——進制轉(zhuǎn)換

2019-11-06 06:24:59
字體:
供稿:網(wǎng)友

在上一篇博文中我們實現(xiàn)了后進先出的數(shù)據(jù)結(jié)構(gòu)——棧(Stack)。它后進先出的特性,使他成為程序設(shè)計中的有用工具。

在這篇博文中,我們將利用上一篇博文中實現(xiàn)的MyArrayStack去完成一個進制轉(zhuǎn)換的任務(wù)。

任務(wù)目標(biāo):

給予一個非負十進制數(shù)N,要求轉(zhuǎn)換成的2進制數(shù)。

算法原理:

假設(shè)二進制數(shù)N需要轉(zhuǎn)換為d進制數(shù),其算術(shù)原理為:

N = (N / d) * d + N%d

我們要將非負10進制數(shù)轉(zhuǎn)換為2進制數(shù),就是將該數(shù)用短除法除以2,取得每一位的余數(shù),將余數(shù)按順序壓入棧中則輸出的數(shù)就是需要轉(zhuǎn)換的數(shù)。

如: 10進制數(shù)19需要轉(zhuǎn)換成為2進制數(shù)

N N/2 N%2
19 9 1
9 4 1
4 2 0
2 1 0
1 0 1

所以二進制數(shù)就是將余數(shù)從高位到低位輸出,即10011

10011 = 1* 2^4+0+0+1 *2^1 +1 = 16 +2 +1 = 19

因此算法十分簡單,只需要將低位到高位的余數(shù)壓入棧中,再從棧頂依次彈出數(shù)字即是需要轉(zhuǎn)換的進制數(shù)了。

代碼實現(xiàn)如下:

public class DecToBinaryTest { //建立類變量stack用來存儲余數(shù) static MyArrayStack<Integer> stack; public static void main(String[] args) { // TODO Auto-generated method stub stack = new MyArrayStack<Integer>(); System.out.PRintln(getBinaryForm(19)); } private static String getBinaryForm(int decNum){ //如果輸入的10進制數(shù)為負數(shù)則拋出異常 if(decNum<0) throw new IllegalArgumentException(); StringBuffer sb = new StringBuffer(); while(decNum !=0){ //當(dāng)decNum不為0時,迭代地除2的余數(shù)壓入棧中 Integer r = decNum % 2; decNum = decNum /2; stack.push(r); } //將棧中的元素彈出并放入到字符串中輸出 while(!stack.isEmpty()) sb.append(stack.pop()); return sb.toString(); }}

本博文源碼下載地址,內(nèi)含MyArrayStack源碼及進制轉(zhuǎn)換源碼,歡迎下載測試。


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 蒲江县| 岑巩县| 仙游县| 桦川县| 望奎县| 泽普县| 沁源县| 湾仔区| 犍为县| 桑日县| 若尔盖县| 南丹县| 铁岭县| 鲁山县| 邹城市| 北安市| 托里县| 和政县| 新疆| 峨山| 黄陵县| 永州市| 嘉鱼县| 保山市| 栾城县| 广昌县| 香格里拉县| 秦皇岛市| 泸州市| 临夏县| 凉城县| 汉源县| 五大连池市| 邵阳市| 阿克苏市| 连山| 达孜县| 龙陵县| 文登市| 绥宁县| 宝山区|