題目:給定n個十六進制正整數,輸出它們對應的八進制數。
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.math.BigInteger;
public class Main_16_8 {
public static void main(String[] args) {
// TODO Auto-generated method stub
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
int n;
try {
n=Integer.parseInt(br.readLine());
String[] strs=new String[n];
for(int i=0;i<n;i++){
strs[i]=br.readLine();
}
for(int i=0;i<n;i++){
BigInteger bi=jinzhi_16_10(strs[i]);
System.out.println(jinzhi_10_8(bi));
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static int getRealValue(char x){
if(x>='0' && x<='9') return x-'0';
if(x>='A' && x<='F') return x-'A'+10;
return 0;
}
public static BigInteger jinzhi_16_10(String x){
char c='0';
BigInteger n=BigInteger.ZERO;
for(int i=0;i<x.length();i++){
c=x.charAt(i);
String str2=getRealValue(c)+"";
n=(BigInteger.valueOf(16).multiply(n)).add(BigInteger.valueOf(Long.parseLong(str2)));//轉化成十進制了
}
return n;
}
public static String jinzhi_10_8(BigInteger n){
String t="";
//十進制轉化為八進制
for(;;){
if(n.equals(BigInteger.ZERO))break;//if(n==BigInteger.ZERO)不行,隻能用equals()函數
t=(n.mod(BigInteger.valueOf(8)))+t;
n=n.divide(BigInteger.valueOf(8));
}
return t;
}
}