题解 | #进制转换#

进制转换

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

import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        while (in.hasNext()) {
            int num = 0;
		  // 去掉16进制的标识符,并且做一个逆序,让它的位数(16的指数)和索引保持一致
            StringBuilder builder = new StringBuilder(in.nextLine().substring(2)).reverse();
            for (int i = 0; i < builder.length(); i++) {
                int y = 1;
                for (int x = 0; x < i; x++) {
				  //16进制,现在是第几位,就是16的几次方
                    y = y * 16;
                }
			  // 计算出这一位上代表的真实数值是多少,比如说最后一位的1代表的就是1,但是倒数第二位的1代表16,但是由于在11行做了逆序,所以最后一位就是第一位,1*16的0次方,索引也是0,倒数第二位变成了第二位,1*16的1次方,索引也是1;
                switch (builder.charAt(i)) {
                    case 'A':
                        num += (10 * y);
                        break;
                    case 'B':
                        num += (11 * y);
                        break;
                    case 'C':
                        num += (12 * y);
                        break;
                    case 'D':
                        num += (13 * y);
                        break;
                    case 'E':
                        num += (14 * y);
                        break;
                    case 'F':
                        num += (15 * y);
                        break;
                    default:
                        num += (Integer.valueOf(builder.charAt(i)+"") * y);
                        break;
                }
            }
            System.out.println(num + "\n");
        }
    }
}

全部评论

相关推荐

点赞 评论 收藏
转发
点赞 收藏 评论
分享
牛客网
牛客企业服务