蓝桥杯练习题之十六进制转十进制

来源:互联网 发布:现在在淘宝做动漫周边 编辑:程序博客网 时间:2024/06/04 19:35

问题描述
  从键盘输入一个不超过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 input = new Scanner(System.in);String str = input.nextLine();int out = tran(str);System.out.println(out);input.close();}public static int tran(String str) {int len = str.length();int[] a = new int[len];int dec = 0;for (int i = len - 1; i >= 0; i--) {a[i] = str.charAt(i);switch (a[i]) {case 'A':a[i] = 10;break;case 'B':a[i] = 11;break;case 'C':a[i] = 12;break;case 'D':a[i] = 13;break;case 'E':a[i] = 14;break;case 'F':a[i] = 15;break;default:a[i] = a[i] - '0';}int temp = 1;for (int j = len; j > len - i; j--) {temp *= 16;}dec += temp * a[i];}return dec;}}
第一次的代码我只得了25分,经检查,是内存消耗过大,同时也没进行大数处理,第二次我按照锦囊二的提示按数位依次操作,每次将前面的乘16,再加上当前数位的值对dec进行运算,然而当时并没有对dec进行大数处理,于是乎,测试以75分收场...

public static int tran(String str) {int len = str.length();int[] a = new int[len];int[] dec = new int[len];int[] num = new int[len];int k = 0;dec[0] = 0; for (int i = len - 1; i >= 0; i--) {a[i] = str.charAt(i);switch (a[i]) {case 'A':a[i] = 10;break;case 'B':a[i] = 11;break;case 'C':a[i] = 12;break;case 'D':a[i] = 13;break;case 'E':a[i] = 14;break;case 'F':a[i] = 15;break;default:a[i] = a[i] - '0';}if (len - 1 == i) {num[k] = 1;dec[k] = a[i] * num[k];} else {num[k] = num[k - 1] * 16; dec[k] = a[i] * num[k] + dec[k - 1];}k++;}return dec[k - 1];}}


修改了变量类型后,代码终于满分通过了测试...

import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner input = new Scanner(System.in);String str = input.nextLine();long out = tran(str);System.out.println(out);input.close();}public static long tran(String str) {int len = str.length();int[] a = new int[len];long[] dec = new long[len];long[] num = new long[len];int k = 0;dec[0] = 0; for (int i = len - 1; i >= 0; i--) {a[i] = str.charAt(i);switch (a[i]) {case 'A':a[i] = 10;break;case 'B':a[i] = 11;break;case 'C':a[i] = 12;break;case 'D':a[i] = 13;break;case 'E':a[i] = 14;break;case 'F':a[i] = 15;break;default:a[i] = a[i] - '0';}if (len - 1 == i) {num[k] = 1;dec[k] = a[i] * num[k];} else {num[k] = num[k - 1] * 16; dec[k] = a[i] * num[k] + dec[k - 1];}k++;}return dec[k - 1];}}


喜欢就请关注我,你们的关注是我最大的动力~

查阅相关代码请点击:https://github.com/striner/javaCode/blob/master/hexadecimalToDecimal


阅读全文
0 0
原创粉丝点击