赞
踩
问题描述
从键盘输入一个不超过8位的正的十六进制数字符串,将它转换为正的十进制数后输出。
注:十六进制数中的10~15分别用大写的英文字母A、B、C、D、E、F表示。
样例输入
FFFF
样例输出
65535
解:
F的十进制为15,
65535=
15×16³+
15×16²+
15×16+
15×1
有了这个式子,就可以利用循环来实现进制转换
十六进制转十进制的规律:
若字符≤‘9’,则
十进制=第i位数-‘0’+16^(i-1);
若字符≥‘A’,则
十进制=第i位数-‘A’+10+16^(i-1);
用代码来看会更清晰:
//≥'A'
dec += (d[i] - 'A' + 10) * Math.pow(16,len - 1 - i);
//≤'9'
dec += (d[i] - '0') * Math.pow(16,len - 1 - i);
(d[i] - ‘A’ + 10)代表字符对应的十进制值,
例如F的ASCII码为70,A为65,则F对应的十进制为70-65+10=15
通过循环即可进行转化。
注:题目要求不超过8位的字符串,所以不应该用int,而是long
public class test { public static void main(String args[]) { Scanner input = new Scanner(System.in); String sc = input.nextLine(); char d[] = sc.toCharArray();//将字符串转换为字符数组 int len = d.length; long dec = 0;//题目条件的不超过8为的字符串,所以格式应该是long input.close(); for(int i = 0;i < len;i++) { if(d[i] >= 'A') { dec += (d[i] - 'A' + 10) * Math.pow(16,len - 1 - i); }else { dec += (d[i] - '0') * Math.pow(16,len - 1 - i); } } System.out.printf("%d", dec); } }
如果用java中自带的函数就会很简单,但好像在考试中行不通
public class test {
public static void main(String args[]) {
Scanner input = new Scanner(System.in);
BigInteger bi = null;
String enter = null;
enter = input.next();
bi = new BigInteger(enter,16);
String show = bi.toString(10);
System.out.println(show);
Integer.valueOf("FFFF",16).toString();
}
}
BigInteger: 任意大的整数,原则上是,只要你的计算机的内存足够大,可以有无限位的
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。