原题目:
问题描述
给定n个十六进制正整数,输出它们对应的八进制数。
输入格式
输入的第一行为一个正整数n (1<=n<=10)。
接下来n行,每行一个由09、大写字母AF组成的字符串,表示要转换的十六进制正整数,每个十六进制数长度不超过100000。
输出格式
输出n行,每行为输入对应的八进制正整数。
题目看起来很简单。
正常情况下直接
public class Main {
public static void main(String args[]){
Scanner a = new Scanner(System.in);
Integer k = a.nextInt();
String[] st = new String[k];
for(int i = 0;i<k;i++){
st[i] = a.next();
}
for(int j = 0;j<k;j++){
System.out.println(Integer.toString(Integer.parseInt(st[j],16),8));
}
}
}
但是发现该答案无法通过。
原因如下图:
这输入一个比一个大。最后都要爆表了。无法用十进制的整型和integer类去做中间转换。
如果想着手动用字符串拼接是非常麻烦且不必要的。
正确方法是用大数据类型BigInteger处理
class lqMain{
public static void main(String args[]){
Scanner sc = new Scanner(System.in);
int k = sc.nextInt();
String[] str = new String[k];
for(int i = 0;i<k;i++){
str[i] = sc.next();
}
for(int j = 0;j<k;j++){
System.out.println(new BigInteger(str[j],16).toString(8));
}
}
}
代码正常通过。