藍橋杯基礎練習 十六進制轉八進制(Java解法)

問題描述

給定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));
        }
    }
}

這個題最優的算法肯定不是如此,但由於懶惰的我,使用此法也挺滿足。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章