蓝桥杯(Java)——十六进制转八进制

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

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

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

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

样例输入
  2
  39
  123ABC

样例输出
  71
  4435274

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

import java.util.*;
public class Main {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner input = new Scanner(System.in);
		int n = input.nextInt();
		String[] str = new String[n];
		for(int i = 0; i < n ; i++) {
			str[i] = input.next();
		}
		// 转换
		for(int i = 0; i < n ; i++) {
			StringBuilder bs = new StringBuilder();
			StringBuilder os = new StringBuilder();
			for(int j = 0; j < str[i].length(); j++) {
				char c = str[i].charAt(j);
				String s = Integer.toBinaryString(Integer.valueOf(String.valueOf(c),16));
// 十六进制转二进制,Java自带进制转换方法无法转换大数据
				for(int k = s.length(); k < 4 & j != 0; k++) {
					s = "0" + s; // 将二进制数位补足,防止出现前导零
				}
				bs.append(s);
			}
			if(bs.length() % 3 == 1) bs = new StringBuilder("00").append(bs);
			else if(bs.length() % 3 == 2) bs = new StringBuilder("0").append(bs);// 将二进制位数增加为3的倍数
			for(int j = 0; j < bs.length(); j = j + 3) {
				String sub = bs.substring(j,j+3);
//				System.out.println(sub);
				os.append(Integer.toOctalString(Integer.valueOf(sub,2)));
			}
			System.out.println(os);
		}
		input.close();
	}
}
发布了18 篇原创文章 · 获赞 1 · 访问量 1004

猜你喜欢

转载自blog.csdn.net/qq_38969094/article/details/86700230