蓝桥 基础练习十六进制转十进制

laughingcute 2017-03-19 01:57:54
题目
问题描述

  从键盘输入一个不超过8位的正的十六进制数字符串,将它转换为正的十进制数后输出。
  注:十六进制数中的10~15分别用大写的英文字母A、B、C、D、E、F表示。
样例输入
FFFF
样例输出
65535

代码如下:我自己的代码不是这样,我看的别人的代码,有一个问题没懂。
import java.util.Scanner;
public class change10 {
public static void main(String[] args) {

Scanner sc=new Scanner(System.in);
String s=sc.nextLine();
char c[]=s.toCharArray(); //将字符串对象中的字符转换为一个字符数组
int n=c.length;
long sum=0; //long型的取值范围:-9223372036854775808~9223372036854775807
for(int i=0;i<n;i++){//2af5:5*16^0+f*16^1+a*16^2=2*16^3
if((long)c[i]-48>9){//
if(c[i]=='A')
sum+=10*Math.pow(16,n-i-1);
else if(c[i]=='B')
sum+=11*Math.pow(16,n-i-1);
else if(c[i]=='C')
sum+=12*Math.pow(16,n-i-1);
else if(c[i]=='D')
sum+=13*Math.pow(16,n-i-1);
else if(c[i]=='E')
sum+=14*Math.pow(16,n-i-1);
else if(c[i]=='F')
sum+=15*Math.pow(16,n-i-1);
}
else{
sum+=((long)c[i]-48)*Math.pow(16,n-i-1);
}
}
System.out.println(sum); } }
有一个问题有一些不懂就是c【i】-48>9是?
...全文
154 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
laughingcute 2017-03-19
  • 打赏
  • 举报
回复
我还在网上看到了其他算法, 1、 import java.util.Scanner; public class change10_1 { public static void transform() { Scanner sc = new Scanner(System.in); String arry = ""; String number = sc.next(); if (number.length() <= 8) { arry = Long.valueOf(number, 16).toString(); } System.out.println(arry); } public static void main(String[] args) { transform(); } } 2、 import java.util.Scanner; public class change10_2 { public static void convertHexIntoDecimal(char[] arryHex, String hexStr){ StringBuilder binaryStb = new StringBuilder(); int len = hexStr.length(); long count = 1; long decimal = 0; String binaryStr = ""; arryHex = hexStr.toCharArray(); for (int i = 0; i < len; i++) { //Convert Hex into Binary switch (arryHex[i]) { case '0': binaryStb.append("0000"); break; case '1': binaryStb.append("0001"); break; case '2': binaryStb.append("0010"); break; case '3': binaryStb.append("0011"); break; case '4': binaryStb.append("0100"); break; case '5': binaryStb.append("0101"); break; case '6': binaryStb.append("0110"); break; case '7': binaryStb.append("0111"); break; case '8': binaryStb.append("1000"); break; case '9': binaryStb.append("1001"); break; case 'A': binaryStb.append("1010"); break; case 'B': binaryStb.append("1011"); break; case 'C': binaryStb.append("1100"); break; case 'D': binaryStb.append("1101"); break; case 'E': binaryStb.append("1110"); break; case 'F': binaryStb.append("1111"); break; default: break; } } binaryStr = binaryStb.toString(); len = binaryStr.length(); for(int i = len - 1; i >= 0; i--){ if(binaryStr.charAt(i) == '1'){ decimal = decimal + count; } count = count * 2; } System.out.println(decimal); } public static void main(String[] args) { Scanner sc = new Scanner(System.in); char [] arryHex = new char[8]; String hexStr = sc.next(); convertHexIntoDecimal(arryHex,hexStr); } } 我自己用的是这个 import java.util.*; public class Main { public static void main(String[] args){ Scanner input=new Scanner(System.in); String n=input.nextLine(); Integer.valueOf("FFFF",16).toString();//十六进制转成十进制 if(n.length()<=8){ System.out.println(Long.parseLong(n,16));} } }

51,409

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧