您的位置:首页 > 其它

蓝桥杯-基础练习 十六进制转八进制

2019-03-20 13:25 134 查看

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

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

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

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

样例输入
  2
  39
  123ABC

样例输出
  71
  4435274

import java.util.Scanner;

public class basic_12 {

public static void main(String[] args) {
// TODO Auto-generated method stub
int n;
String arr[] = {"0000", "0001", "0010", "0011", "0100", "0101", "0110", "0111", "1000",
"1001", "1010", "1011", "1100", "1101", "1110", "1111"};
Scanner sc = new Scanner(System.in);
n=sc.nextInt();
sc.nextLine();
while(n--!=0) {
int a=0;
StringBuffer list =new StringBuffer();

String str = sc.nextLine();
char []ch = str.toCharArray();
for(int i=0;i<ch.length;i++) {
if(ch[i]>='A'&&ch[i]<='F') {
list.append(arr[ch[i]-'A'+10]);

}else {
list.append(arr[ch[i]-'0']);

}
}
if(list.length()%3==1) {
a=(list.charAt(0)-'0');
if(a!=0)System.out.print(a);
for(int i=1;i<list.length();i+=3) {
a=(list.charAt(i)-'0')*4+(list.charAt(i+1)-'0')*2+(list.charAt(i+2)-'0');
System.out.print(a);

}
}else
if(list.length()%3==2) {
a=(list.charAt(0)-'0')*2+(list.charAt(1)-'0');
if(a!=0)System.out.print(a);
for(int i=2;i<list.length();i+=3) {
a=(list.charAt(i)-'0')*4+(list.charAt(i+1)-'0')*2+(list.charAt(i+2)-'0');
System.out.print(a);
}
}
else{
a=(list.charAt(0)-'0')*4+(list.charAt(1)-'0')*2+(list.charAt(2)-'0');
if(a!=0)System.out.print(a);
for(int i=3;i<list.length();i+=3) {
a=(list.charAt(i)-'0')*4+(list.charAt(i+1)-'0')*2+(list.charAt(i+2)-'0');
System.out.print(a);
}
}

System.out.println();

}
sc.close();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: