题解 | #进制转换#

进制转换

https://www.nowcoder.com/practice/8f3df50d2b9043208c5eed283d1d4da6

import java.util.Scanner;


/**
前置知识点:
0xAA 中的0x表示给计算机看的,表示16进制
16进制就是逢16进1,但我们只有0~9这十个数字,
所以我们用A,B,C,D,E,F这六个字母来分别表示10,11,12,13,14,15。字母不区分大小写,

假设有一个十六进数 2AF5, 那么如何换算成10进制?
用竖式计算:
2AF5换算成10进制:
第0位:5 x 16º = 5
第1位:F x 16¹ = 15 x 16¹ = 240
第2位:A x 16² = 10 x 16² = 2560
第3位:2 x 16³ = 2  x 16³ = 8192
直接计算就是:5 x 16º + F x 16¹ + A x 16² + 2 x 16³

可以看出,所有进制换算成10进制,关键在于各自的权值不同

思考点:
1. 怎么区分字母和数字呢? ---> 正则
2. 怎么表示次方呢? --->  用math函数,Math.pow(double a, double b)方法用于计算a的b次方。
3 .16进制的英文字符换算成数字在java中怎么表示?  A = 10, B =11  ,字符char之间可以直接运算,对应ASII码表

注意:
String.valueOf()  转字符串
Integer.parseInt() 转整形
 */
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String inputStr = in.nextLine();
        //去除掉前面的16进制标识符0x
        String newStr = inputStr.substring(2);
        int totalNum = 0;
        char c;
        for (int i = 0; i < newStr.length(); i++) {
            //取到字符串最后一个字符
            c = newStr.charAt(newStr.length() - 1 - i );
            if (String.valueOf(c).matches("[0-9]")) {
                totalNum += Integer.parseInt(String.valueOf(c)) * Math.pow(16, i);
            } else if (String.valueOf(c).matches("[A-Z]")) {
                totalNum += (10 + (c - 'A')) * Math.pow(16, i);
            } else if (String.valueOf(c).matches("[a-z]")) {
                totalNum += (10 + (c - 'a')) * Math.pow(16, i);
            }

        }
        System.out.println(totalNum);

    }
}

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务