蓝桥杯 基础练习 十六进制转十进制 java

Basic11 基础练习 十六进制转十进制

题目如下:
蓝桥杯 基础练习 十六进制转十进制 java_第1张图片

这个其实也没什么好说的,要注意一点如果自己写的比直接调用java库的方法效率更高的话就不要去调用了

算法是基础的,只要知道十六进制是怎么转成十进制的,然后实现即可

还有一个注意点,比如Integer.parseInt这种,如果最后超出int的范围就会抛转换异常

package basic;

import java.util.Scanner;

/**
 * @Description: Basic11 基础练习 十六进制转十进制
 * @ClassName: Basic11
 * @author: fan.yang
 * @date: 2020/07/12 10:42
 */
public class Basic11 {

    /**
     * 算法
     * 十六进制转十进制就是每位乘以16的相应次方的和
     * 比如 2AF5 --》 5 * 16^0 + F * 16^1 + A * 16^2 + 2 * 16^3 = 10997
     * 78ms
    */
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String hex = scanner.next();
        Long pow = 1L;
        Long dec = 0L;
        //这里没必要调用Math.pow了
        for(int i = hex.length() - 1;i >= 0;i--){
            char c = hex.charAt(i);
            if(Character.isLetter(c)){
                dec += (c - 'A' + 10) * pow;
            }else{
                dec += (c - '0') * pow;
            }
            pow *= 16;
        }
        System.out.println(dec);
    }


    /**
     * 直接调用java进制转化方法 方便的 100ms
     */
    /*public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String hex = scanner.next();
        System.out.println(Long.parseLong(hex , 16));
        //System.out.println(Integer.parseInt(hex , 16)); 这里转化成int会超范围 所以还是用long
    }*/

}

你可能感兴趣的:(蓝桥杯)