蓝桥杯-十六进制转十进制



import java.util.*;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String data=sc.next();
//        System.out.println();
        solution(data);
    }
    //十六进制转换十进制 int
    public static void solution(String data) {
    	int len=data.length();
    	Double res=0.0;
    	//得到科学计数法
    	for (int i = 0; i < data.length(); i++) {
    		res+=changeChar(data.charAt(i))*Math.pow(16, len-i-1);
		}
    	System.out.println(science(res.toString()));
    }
    //科学计数法提取数字
    public static String science(String res) {
    	StringBuffer sb=new StringBuffer(res);
    	int index=0;
    	//第一种情况就是有E的科学技术法
    	if(res.charAt(res.length()-2)=='E') {
    		index=res.charAt(res.length()-1)-'0';//提取后面的数字
    		sb=new StringBuffer(sb.substring(0,res.length()-2));//切除后面的Ex
    		sb.replace(1, 2, "");//去除小数点
    		if((sb.length()-1)==index) {
    			return sb.toString();
    		}else {
    			for (int i = 0; i <index-sb.length()+1; i++) {
					sb.append("0");
				}
    			return sb.toString();
    		}
    	}
    	//正常计数的情况
    	else {
    		return res.substring(0,res.length()-2);
    	}
    }
    //取数字
    public static int changeChar(char c) {
    	int i=0;
    	switch(c) {
    		case'A':
    			i=10;
    			break;
    		case'B':
    			i=11;
    			break;
    		case'C':
    			i=12;
    			break;
    		case'D':
    			i=13;
    			break;
    		case'E':
    			i=14;
    			break;
    		case'F':
    			i=15;
    			break;
    		default:
    			i=c-'0';
    			break;
    		
    	}
    	return i;
    }
    	

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值