问题描述
给定 n 个十六进制正整数,输出它们对应的八进制数。
输入格式
输入的第一行为一个正整数 n ( 1 <= n <= 10 )。
接下来n行,每行一个由 0 ~ 9 、大写字母 A ~ F 组成的字符串,表示要转换的十六进制正整数,每个十六进制数长度不超过 100000 。
输出格式
输出 n 行,每行为输入对应的八进制正整数。
【注意】
输入的十六进制数不会有前导 0 ,比如 012A 。
输出的八进制数也不能有前导 0 。
样例输入
2
39
123ABC
样例输出
71
4435274
//这是个超时的代码,只是提供一下思路与做法
public static void main(String[] args)
{
Scanner sc = new Scanner(System.in);
int t = sc.nextInt();
for (int i = 1; i <= t; i++)
{
BigInteger n = sc.nextBigInteger(16);
if (n.compareTo(BigInteger.valueOf(0)) == 0)
//compareTo是大数里面用于比较的函数
System.out.println(0);
else
{
String a = "";
while (n.compareTo(BigInteger.valueOf(0)) > 0)
{
BigInteger b = n.mod(BigInteger.valueOf(8));
//mod大数取余
a = b + a;
n = n.divide(BigInteger.valueOf(8));
//divide大数除法
}
System.out.println(a);
}
}
}
//ac代码
//只能使用类库
//因为他最大是不超过 100000 位的 16 进制
public static void main(String[] args)
{
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
while (n-- > 0)
{
BigInteger a = sc.nextBigInteger(16);
System.out.println(a.toString(8));
}
}