問題描述
給定n個十六進制正整數,輸出它們對應的八進制數。
輸入格式
輸入的第一行爲一個正整數n (1<=n<=10)。
接下來n行,每行一個由09、大寫字母AF組成的字符串,表示要轉換的十六進制正整數,每個十六進制數長度不超過100000。
輸出格式
輸出n行,每行爲輸入對應的八進制正整數。
【注意】
輸入的十六進制數不會有前導0,比如012A。
輸出的八進制數也不能有前導0。
樣例輸入
2
39
123ABC
樣例輸出
71
4435274
使用BigInteger的封裝方法解決
這個題本來以爲很簡單,但其實不然,測試數據很大,所以用大整數的封裝方法,但是普通的讀入效率太低,會導致程序超時,所以改用BufferedReader讀取,這樣可解決超時問題。
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.math.BigInteger;
public class Main{
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
// 轉出
for (int i = 0; i < n; i++) {
System.out.println(new BigInteger(br.readLine(),16).toString(8));
}
}
}
這個題最優的算法肯定不是如此,但由於懶惰的我,使用此法也挺滿足。