2016藍橋杯假期任務之《十六進位制轉八進位制》
阿新 • • 發佈:2019-02-03
問題描述
給定n個十六進位制正整數,輸出它們對應的八進位制數。
輸入格式
輸入的第一行為一個正整數n (1<=n<=10)。
接下來n行,每行一個由0~9、大寫字母A~F組成的字串,表示要轉換的十六進位制正整數,每個十六進位制數長度不超過100000。
輸出格式
輸出n行,每行為輸入對應的八進位制正整數。
【注意】
輸入的十六進位制數不會有前導0,比如012A。
輸出的八進位制數也不能有前導0。
樣例輸入
2
39
123ABC
樣例輸出
71
4435274
【提示】
先將十六進位制數轉換成某進位制數,再由某進位制數轉換成八進位制。
程式碼如下:
import java.io.BufferedReader; import java.io.InputStreamReader; public class Main{ public static void main(String[] args) throws Exception { BufferedReader buf = new BufferedReader(new InputStreamReader(System.in)); int n = Integer.parseInt(buf.readLine()); String str[] = new String[n]; for(int i=0;i<n;i++) str[i] = buf.readLine(); for(int j=0;j<n;j++) transform2(str[j]); } private static void transform2(String s) { StringBuffer str1 = new StringBuffer(); char c[] = s.toCharArray(); for(int i=0;i<c.length;i++){ switch(c[i]){ case '0': str1.append("0000"); break; case '1': str1.append("0001"); break; case '2': str1.append("0010"); break; case '3': str1.append("0011"); break; case '4': str1.append("0100"); break; case '5': str1.append("0101"); break; case '6': str1.append("0110"); break; case '7': str1.append("0111"); break; case '8': str1.append("1000"); break; case '9': str1.append("1001"); break; case 'A': str1.append("1010"); break; case 'B': str1.append("1011"); break; case 'C': str1.append("1100"); break; case 'D': str1.append("1101"); break; case 'E': str1.append("1110"); break; case 'F': str1.append("1111"); break; } } transform8(str1); } private static void transform8(StringBuffer s) { int i = s.length(); if(i%3==0){ if(s.substring(0,3).equals("000")) s.delete(0, 3); } if(i%3==1){ if(s.substring(0, 1).equals("0")) s.delete(0, 1); else s.insert(0, "00"); } if(i%3==2){ if(s.substring(0, 2).equals("00")) s.delete(0, 2); else s.insert(0, "0"); } int n = s.length()/3; String s1[] = new String[n]; StringBuffer str2 = new StringBuffer(); for(int j=0;j<n;j++){ s1[j] = s.substring(j*3,j*3+3); if(s1[j].equals("000")) str2.append('0'); if(s1[j].equals("001")) str2.append('1'); if(s1[j].equals("010")) str2.append('2'); if(s1[j].equals("011")) str2.append('3'); if(s1[j].equals("100")) str2.append('4'); if(s1[j].equals("101")) str2.append('5'); if(s1[j].equals("110")) str2.append('6'); if(s1[j].equals("111")) str2.append('7'); } System.out.println(str2.toString()); } }
執行結果:
2
39
123ABC
71
4435274