蓝桥杯-十六进制转八进制(java)
生活随笔
收集整理的這篇文章主要介紹了
蓝桥杯-十六进制转八进制(java)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
基礎(chǔ)練習(xí) 十六進制轉(zhuǎn)八進制 時間限制:1.0s 內(nèi)存限制:512.0MB問題描述給定n個十六進制正整數(shù),輸出它們對應(yīng)的八進制數(shù)。輸入格式輸入的第一行為一個正整數(shù)n (1<=n<=10)。接下來n行,每行一個由0~9、大寫字母A~F組成的字符串,表示要轉(zhuǎn)換的十六進制正整數(shù),每個十六進制數(shù)長度不超過100000。輸出格式輸出n行,每行為輸入對應(yīng)的八進制正整數(shù)。【注意】輸入的十六進制數(shù)不會有前導(dǎo)0,比如012A。輸出的八進制數(shù)也不能有前導(dǎo)0。樣例輸入239123ABC樣例輸出714435274【提示】先將十六進制數(shù)轉(zhuǎn)換成某進制數(shù),再由某進制數(shù)轉(zhuǎn)換成八進制。
package com.sihai.basic;import java.util.Scanner;
import java.util.Stack;public class HexToOtc {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);String str = scanner.nextLine();String binStr = hexToOtc(str);}/** C(1100),D(1101),E(1110),F(1111)*/private static String hexToOtc(String str) {String [] hexArr = {"0000","0001","0010","0011","0100","0101","0110","0111","1000","1001","1010","1011","1100","1101","1110","1111"};String str2 = "";for(int i = 0; i < str.length(); i++){String temp = str.substring(i,i+1);for(int j = 0; j < hexArr.length; j ++){if(Integer.parseInt(temp) == j){str2 += hexArr[j]+",";}}}return str2;}/** * 將數(shù)轉(zhuǎn)為任意進制 * @param num * @param base * @return */ public static String baseString(int num,int base){ if(base > 16){ throw new RuntimeException("進制數(shù)超出范圍,base<=16"); } StringBuffer str = new StringBuffer(""); String digths = "0123456789ABCDEF"; Stack<Character> s = new Stack<Character>(); while(num != 0){ s.push(digths.charAt(num%base)); num/=base; } while(!s.isEmpty()){ str.append(s.pop()); } return str.toString(); } /** * 16進制內(nèi)任意進制轉(zhuǎn)換 * @param num * @param srcBase * @param destBase * @return */ public static String baseNum(String num,int srcBase,int destBase){ if(srcBase == destBase){ return num; } String digths = "0123456789ABCDEF"; char[] chars = num.toCharArray(); //2,2int len = chars.length; if(destBase != 10){//目標(biāo)進制不是十進制 先轉(zhuǎn)化為十進制 num = baseNum(num,srcBase,10); }else{ int n = 0; for(int i = len - 1; i >=0; i--){ n+=digths.indexOf(chars[i])*Math.pow(srcBase, len - i - 1); } return n + ""; } return baseString(Integer.valueOf(num),destBase); } }
總結(jié)
以上是生活随笔為你收集整理的蓝桥杯-十六进制转八进制(java)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 蓝桥杯-回文数(java)
- 下一篇: 蓝桥杯-删除数组零元素(java)