本文主要是介绍华为机试打卡 HJ5 进制转换,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
要机试了,华孝子求捞,功德++
描述
写出一个程序,接受一个十六进制的数,输出该数值的十进制表示。
数据范围:保证结果在 1≤𝑛≤2^31−1
输入描述:
输入一个十六进制的数值字符串。
输出描述:
输出该数值的十进制字符串。不同组的测试用例用\n隔开。
示例1
输入:
0xAA
输出:
170
分析
直接莽,然后寄了,因为太久没接触忘了十六进制还有几个字母
import java.util.*;// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {public static void main(String[] args) {Scanner in = new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别String str = in.nextLine();int count = 0;for (int i = str.length()-1; i >= 0; i-- ) count += Math.pow(16,str.length()-1-i) * ((int)str.charAt(i)-'0');System.out.println(count);}
}
于是反手增加了判断
import java.util.*;// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {public static void main(String[] args) {Scanner in = new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别String str = in.nextLine();int count = 0;for (int i = str.length()-1; i >= 0; i-- ) {int value = Character.isDigit(str.charAt(i))? str.charAt(i)-'0' : str.charAt(i) -'A' +10;count += Math.pow(16,str.length()-i-1)*value;}System.out.println(count);}
}
但还是不对,而且测了几个实际输出都比答案大很多,发现原来前面还有0x标记,但我给算进去了
所以去掉前两个字符
import java.util.*;// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {public static void main(String[] args) {Scanner in = new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别String str = in.nextLine();int count = 0;for (int i = str.length()-1; i >= 2; i-- ) {int value = Character.isDigit(str.charAt(i))? str.charAt(i)-'0' : str.charAt(i) -'A' +10;count += Math.pow(16,str.length()-i-1)*value;}System.out.println(count);}
}
这篇关于华为机试打卡 HJ5 进制转换的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!