题解HJ5 | #进制转换#

进制转换

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

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String a=in.nextLine();
        if(a.charAt(0)=='0'&&a.charAt(1)=='x'){
            int sum=0;
            for(int i=2;i<a.length();i++){
                if(a.charAt(i)<='9'&&a.charAt(i)>='0')
                sum=sum*16+a.charAt(i)-'0';
                else if(a.charAt(i)<='F'&&a.charAt(i)>='A')
                sum=sum*16+a.charAt(i)-'A'+10;
                else System.out.println("error");
            }
        System.out.println(sum);
        }else System.out.println("error");
    }
}

这题也很简单,16进制转化为10进制,给的是字符串类型,先定义字符串

String a=in.nextLine();

然后把16进制的字符从首位挨个*16累加就行了,十六进制数末位有A-F,遇到了直接减去字符A,俩个字符相减是ascll码相减,再+10即可得到16进制数大小

//题目里给的输出都不会有问题,但是实际情况要考虑错误输入

if(a.charAt(0)=='0'&&a.charAt(1)=='x'){//判定给的是不是16进制数

int sum=0 ; //来一个计数的

for(int i=2;i<a.length();i++){ //开始0,1俩个数是0x,所以从2开始,

if(a.charAt(i)<='9'&&a.charAt(i)>='0')

sum=sum*16+a.charAt(i)-'0';

else if(a.charAt(i)<='F'&&a.charAt(i)>='A')

sum=sum*16+a.charAt(i)-'A'+10;

else System.out.println("error");

}

System.out.println(sum);

//最后输出的自然是10进制,如果反过来输出其他进制,就要这个数除以进制数来计算,

//比如460,就是324/16=20......4,4就是末位,然后20>16?,20/16=1....4,倒数第二位就是4,1>16?否,最后输出0x144

//然后把10-15依次对应上A-F

}else System.out.println("error");

#华为OD题库#
华为OD笔试库讲解,JAVA版 文章被收录于专栏

随便发发而已

全部评论

相关推荐

点赞 评论 收藏
分享
11-15 18:39
已编辑
西安交通大学 Java
全村最靓的仔仔:卧槽,佬啥bg呢,本也是西交么
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务