赞
踩
问题描述
从键盘输入一个不超过8位的正的十六进制数字符串,将它转换为正的十进制数后输出。
注:十六进制数中的10~15分别用大写的英文字母A、B、C、D、E、F表示。
样例输入
FFFF
样例输出
65535
首先,先讲一下公式(该公式适合运用于任何进制转十进制):
系数:所给数字每一位上的数据;基数:所给的数字为X进制,基数就位X
权:在数字的右边从0开始编号,每一位上对应的编号即为权
结果 = 系数 * 基数的权次幂相加
例:0x235 = 2 * 16 ^ 2 + 3 * 16 ^ 1 + 5 * 16 ^ 0 = 565
0100 = 1 * 8 ^ 2 + 0 * 8 ^ 1 + 0 * 8 ^ 0 = 64
然后,看代码:
- import java.util.Scanner;
-
- public class Main {
-
- public Main() {
- Scanner scanner = new Scanner(System.in);
- String str = scanner.nextLine();
- int length = str.length(); //获取输入字符串的长度
- int[] a = new int[length]; //定义一个数组,用于存放每一位的数字即存放系数
- for (int i = 0; i < length; i++) { //利用for循环为数组赋值
- switch (str.charAt(i)) {
- case 'a':
- case 'A':
- a[i] = 10;
- break;
- case 'b':
- case 'B':
- a[i] = 11;
- break;
- case 'c':
- case 'C':
- a[i] = 12;
- break;
- case 'd':
- case 'D':
- a[i] = 13;
- break;
- case 'e':
- case 'E':
- a[i] = 14;
- break;
- case 'f':
- case 'F':
- a[i] = 15;
- break;
- default:
- a[i] = Integer.parseInt(str.charAt(i)+""); //将char转换为int
- break;
- }
- }
- long result = 0;
- int n = 0; //定义一个变量作为权
- for (int i = length-1; i >= 0; i--) {
- result += a[i]*Math.pow(16,n); //利用公式计算
- n++;
- }
- System.out.println(result);
- }
-
- public static void main(String[] args) {
- new Main();
- }
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。