问题描述
从键盘输入一个不超过8位的正的十六进制数字符串,将它转换为正的十进制数后输出。
注:十六进制数中的10~15分别用大写的英文字母A、B、C、D、E、F表示。
样例输入
FFFF
样例输出
65535
源代码:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
String string=scanner.next();
long sum=0;
int slen=string.length();
char a;
for(int i=0;i<slen;i++) {
a=string.charAt(i);
if (a>='0'&&a<='9') {
sum+=(a-'0')*Math.pow(16,slen-i-1);
}else if (a>='A'&&a<='F') {
sum+=(a-'A'+10)*Math.pow(16,slen-i-1);
}
}
System.out.println(sum);
}
}
思路
首先想到进制转换公式,但是要先知道每个字符代表的数字是多少。
用charAt()函数挨个读取输入字符串的字符,因为十六进制分为字母和数字两部分,数字的字符形式转换为数字形式只要减去‘0’的到的差值就是代表的数字。字母A就表示10,所以字母转换的时候需要减去‘A’再加上基数10.得到字符代表的数字后用进制转换公式进行计算。
函数
math.pow(底数,n);得到的结果是底数的n次方结果。
版权声明:本文为bulala_399369原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。