题解 | #进制转换#

进制转换

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

/*
以下三个点:
-----------------------------------------
①、16进制的表示 0x(0x是固定写法)数字或者字母(A-F)可以是小写,英文字母A,B,C,D,E,F分别表示数字10~15。
冯16进1,
例如:0xAF=175 的十进制如下:
    相当于 10*16¹ + 15*16º = 160 +15 =175 
-----------------------------------------
②、字符减'0'可以到相应的整数,在ASCII表中对应的数值换算运算。
-----------------------------------------
③、Math.pow(a,b) , 含义是a的b次方

*/
//解法一:
import java.util.*;
public class Main{
    public static void main(String[] args){
        Scanner scan=new Scanner(System.in);
        while(scan.hasNext()){
            String str = scan.nextLine();
            int count = 0;
            //由于前面两位是'0x',故从第三位开始
            str = str.substring(2,str.length());
            //遍历得到的除了0x之外的字符串的部分
            for(int i =0; i<str.length();i++){
                int number = 0;
                if(str.charAt(i) >= '0' && str.charAt(i) <= '9'){
                    //转成相应的数值
                    number = str.charAt(i) - '0';
                //字母'A'/'a'~'F''f'对应数字10~15
                }else if (str.charAt(i)>= 'a' && str.charAt(i) <= 'f'){
                    number = str.charAt(i) - 'a' + 10;
                }else if (str.charAt(i)>= 'A' && str.charAt(i) <= 'F'){
                    number = str.charAt(i) - 'A' + 10;
                }
                count += number * Math.pow(16,str.length()-1-i);
            }
            System.out.println(count);
        }
    }
}


//解法二: 直接用Integer.parseInt("String", 进制) 进行转换。
// import java.util.*;

// public class Main{
//     public static void main(String[] args){
//         Scanner scan=new Scanner(System.in);
//         while(scan.hasNext()){
//             String str=scan.next();
//            System.out.println(Integer.parseInt(str.replaceAll("x",""),16));

//         }
//     }
// }
全部评论
楼主,写的好
点赞 回复 分享
发布于 2022-05-10 23:13

相关推荐

已老实求offer😫:有点像徐坤(没有冒犯的意思哈)
点赞 评论 收藏
分享
评论
19
5
分享
牛客网
牛客企业服务