天天看點

藍橋杯 算法設計_1 十六進制轉八進制

題目:給定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;
	}
}
           

繼續閱讀