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

首頁 > 編程 > Java > 正文

java 16進制轉換8進制

2019-11-06 08:01:59
字體:
來源:轉載
供稿:網友

1.問題描述

    給定n個十六進制正整數,輸出它們對應的八進制數。

2.輸入格式

    輸入的第一行為一個正整數n (1<=n<=10)。 接下來n行,每行一個由0~9、大寫字母A~F組成的字符串,表示要轉換的十六進制    正整數,每個十六進制數長度不超過100000。

3.輸出格式

     輸出n行,每行為輸入對應的八進制正整數。     注意:   輸入的十六進制數不會有前導0,比如012A。   輸出的八進制數也不能有前導0。

4.解題思路

    從進制轉換基礎,進制轉換可知,可以將16進制轉換為2進制,再由2進制進行轉化8進制,至于為什么這樣做呢,因為16進制每一個位子上的數字都可以變成4位的2進制數,而每3個二進制數又可以組成8進制上對應位子的數字。

5.java代碼
public class Test{	public static void main(String[] args)	{		Scanner scanner=new Scanner(System.in);		int n=scanner.nextInt();		if (n>=1||n<=10)		{			String strings[]=new String[n];			for (int i = 0; i < n; i++)			{				strings[i]=scanner.next();			}			//使用for each類型的循環			for (String str : strings)			{				//調用transform16To8()靜態方法				transform16To8(str);			}		}else {			scanner.close();			return;		}			}	PRivate static void transform16To8(String str)	{		//初始化StringBuffer類的sb對象,但是這樣的 對象是一個空		StringBuffer sb=new StringBuffer();		//for循環		for (int i = 0; i < str.length(); i++)		{			// 把16進制數的每一位轉換成四位2進制數字			String string=transform16To2(str.charAt(i));			sb.append(string);		}		//將轉換成2進制的數字放入java棧中		Stack<String> stack=new Stack<>();		//最后 i -= 3;這句的意思就是i = i - 3		for (int i = sb.length(); i >=0; i-=3)		{			int start= i-3 >=0 ? i-3 : 0;			//截取字符串			String temp=sb.substring(start,i);			// 從后向前每三位2進制數字轉換成一位8進制數字,存儲在棧中。			stack.add(transform12To8(temp));		}		//判斷棧頂是否有0        while (stack.peek().equals("0")) {         	// 刪除前面的多余的0            stack.pop();          }          while (!stack.isEmpty()) {              System.out.print(stack.pop());          }          System.out.println();  			}	private static String transform12To8(String str)	{		    int result = 0;  	        for (int i = 0; i < str.length(); i++) {  	            result += Math.pow(2, str.length() - 1 - i) * (str.charAt(i) - '0');	        }  	        return result + "";  	}	private static String transform16To2(char c)	{				int temp=c>='A'?c - 'A' + 10 : c - '0';		int[] a=new int[4];		int i = 0;		for (; i < a.length; i++)		{			//取temp的余數			a[i]=temp%2;			temp /= 2;  		}		i--;		StringBuffer sb =new StringBuffer();		//逆序排列		for (; i>=0; i--)		{			sb.append(a[i]);		}		return sb.toString();	}	}


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 修水县| 墨脱县| 阳谷县| 长乐市| 聂荣县| 法库县| 屏南县| 安义县| 高碑店市| 赞皇县| 江阴市| 岗巴县| 茶陵县| 斗六市| 桂林市| 泰和县| 英超| 临夏县| 江陵县| 武城县| 梅州市| 鄱阳县| 聂荣县| 麻栗坡县| 博白县| 和田县| 元阳县| 泸西县| 云和县| 青阳县| 红桥区| 陵川县| 芷江| 饶河县| 萨迦县| 浑源县| 咸丰县| 越西县| 轮台县| 新营市| 辰溪县|