16进制转8进制-蓝桥杯java

问题描述
  给定n个十六进制正整数,输出它们对应的八进制数。

输入格式
  输入的第一行为一个正整数n (1<=n<=10)。
  接下来n行,每行一个由0~9、大写字母A~F组成的字符串,表示要转换的十六进制正整数,每个十六进制数长度不超过100000。

输出格式
  输出n行,每行为输入对应的八进制正整数。

  【注意
  输入的十六进制数不会有前导0,比如012A。
  输出的八进制数也不能有前导0。

样例输入
  2
  39
  123ABC

样例输出
  71
  4435274

  提示
  先将十六进制数转换成某进制数,再由某进制数转换成八进制。

import java.util.ArrayList;
import java.util.Collections;
import java.util.Deque;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Scanner;
import java.util.Set;
import java.util.TreeSet;

public class Main{
	public static void main(String[] args){
		Scanner sc = new Scanner(System.in);;
		int n = sc.nextInt();
		for(int i = 0; i < n; i++) {
			String str = sc.next();
			String binarySt = toBinary(str);
			int len1 = binarySt.length();
			if(len1%3==1) binarySt = "00"+binarySt;
			if(len1%3==2) binarySt = "0"+binarySt;
			String ansSt = toOctal(binarySt);
			System.out.println(ansSt);
		}
	}
	private static String toBinary(String str) {
		StringBuilder ans = new StringBuilder();
		int len = str.length();
		for(int i = 0; i < len; i++) {
			switch(str.charAt(i)) {
			case '0': ans.append("0000");break;
			case '1': ans.append("0001");break;
			case '2': ans.append("0010");break;
			case '3': ans.append("0011");break;
			case '4': ans.append("0100");break;
			case '5': ans.append("0101");break;
			case '6': ans.append("0110");break;
			case '7': ans.append("0111");break;
			case '8': ans.append("1000");break;
			case '9': ans.append("1001");break;
			case 'A': ans.append("1010");break;
			case 'B': ans.append("1011");break;
			case 'C': ans.append("1100");break;
			case 'D': ans.append("1101");break;
			case 'E': ans.append("1110");break;
			case 'F': ans.append("1111");break; 
			default : break;
			}
		}
		return ans.toString();
	}
	private static String toOctal(String str) {
		StringBuilder ans = new StringBuilder();
		int len = str.length(),k;
		if(str.substring(0, 3).equals("000"))
            k=3;
        else
            k=0;
		for(int i = k; i <= len - 3; i += 3) {
			switch(str.substring(i,i + 3)) {
			case "000": ans.append("0");break;
			case "001": ans.append("1");break;
			case "010": ans.append("2");break;
			case "011": ans.append("3");break;
			case "100": ans.append("4");break;
			case "101": ans.append("5");break;
			case "110": ans.append("6");break;
			case "111": ans.append("7");break;
			default : break;
			}
		}
		return ans.toString();
	}
}
发布了97 篇原创文章 · 获赞 3 · 访问量 9422

猜你喜欢

转载自blog.csdn.net/foolishpichao/article/details/103402322