十六进制转化为八进制 (正确but超时)

package cn.edu.lanqiao.basetrain;


import java.math.BigInteger;
import java.text.DecimalFormat;
import java.util.Scanner;

public class BASIC_12_2 {

	/**
	 * @param args
	 * 
	 * 2
  	   39
                123ABC
	 */
	public static void main(String[] args) {
		
		Scanner sc=new Scanner(System.in);
		
		int n=sc.nextInt();
		
		String[] num=new String[n];
		//接受输入的数
	
		for(int i=0;i<n;i++){
			num[i]=sc.next();
			
		}
		
		
		for(int i=0;i<n;i++){
			
			String sn="";
		BigInteger decimal=toDecimal(num[i]);
		
		//System.out.println(decimal);
		
		if(decimal.compareTo(BigInteger.valueOf(0))==0){
			System.out.println(0);
		}
		while(decimal.compareTo(BigInteger.valueOf(0))!=0){
				sn=sn+decimal.mod(BigInteger.valueOf(8));
				
				decimal=decimal.divide(BigInteger.valueOf(8));
	
		}
			
		//System.out.println(sn);
		System.out.println(new StringBuffer(sn).reverse());
		}
		
	}
	
	//十六进制转化为十进制---------
	public static BigInteger toDecimal(String s){
		
		BigInteger dec = BigInteger.valueOf(0);
		
		BigInteger big = BigInteger.valueOf(16);
		
		DecimalFormat dt=new DecimalFormat("#");
		
		for(int i=0;i<s.length();i++){
			
			//返回指定索引处的字符
			char ch=s.charAt(i);
			
			//判断该字符是否为数字
			if(Character.isDigit(ch)){
				//如果是数字,按照公式转化
				
				//首先将指定字符转化为字符串,
				String ss=String.valueOf(ch);
				long s1=Integer.parseInt(ss);
				//BigInteger a=new BigInteger("Integer.parseInt(ss)*Math.pow(16, s.length()-1-i)");
			
				dec=dec.add(new BigInteger(dt.format(big.pow(s.length()-1-i).multiply(BigInteger.valueOf(s1)))));
				
			}
			else{
				if(ch=='A'){
					dec=dec.add(new BigInteger(dt.format(big.pow(s.length()-i-1).multiply(BigInteger.valueOf(10)))));
					//dec=dec.add(new BigInteger(dt.format(10*Math.pow(16,s.length()-i-1))));

				}else if(ch=='B'){
					dec=dec.add(new BigInteger(dt.format(big.pow(s.length()-i-1).multiply(BigInteger.valueOf(11)))));
		
				}else if(ch=='C'){
					dec=dec.add(new BigInteger(dt.format(big.pow(s.length()-i-1).multiply(BigInteger.valueOf(12)))));
		
				}else if(ch=='D'){
					dec=dec.add(new BigInteger(dt.format(big.pow(s.length()-i-1).multiply(BigInteger.valueOf(13)))));
					
				}else if(ch=='E'){
					dec=dec.add(new BigInteger(dt.format(big.pow(s.length()-i-1).multiply(BigInteger.valueOf(14)))));
				
				}else if(ch=='F'){
					dec=dec.add(new BigInteger(dt.format(big.pow(s.length()-i-1).multiply(BigInteger.valueOf(15)))));
				}
			}
		}
		
		return dec;
		
	}

}
十六进制转化为八进制  (正确but超时)十六进制转化为八进制  (正确but超时) ${尽余生} 发布了16 篇原创文章 · 获赞 1 · 访问量 1414 私信 关注
上一篇:VS Code常用插件安装


下一篇:*正版官方指定稳赚高级邀请码77602203