进制转换
程序员文章站
2022-04-04 11:13:45
...
一、题目描述
写出一个程序,接受一个十六进制的数,输出该数值的十进制表示。(多组同时输入 )
二、代码实现
1、对每个字符进行解析
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (sc.hasNext()) {
String input = sc.next();
String str = input.substring(2);
int result = 0;
//int multiply = 1;
for (int i=0; i<str.length(); i++) {
char ch = str.charAt(i);
int constant = 0;
if (ch >= '0' && ch <= '9') {
constant = ch - '0';
} else {
switch(ch) {
case 'A':
case 'a':
constant = 10;
break;
case 'B':
case 'b':
constant = 11;
break;
case 'C':
case 'c':
constant = 12;
break;
case 'D':
case 'd':
constant = 13;
break;
case 'E':
case 'e':
constant = 14;
break;
case 'F':
case 'f':
constant = 15;
}
}
result = result * 16 + constant;
}
System.out.println(result);
}
}
}
另一种写法:
通过查看ASCII码表,可以看到字符'0'对应的整数为48,字符'A'对应的整数为65,因此字符'0'-字符'9'转换成整数形式应该减去48。字符'A'转换成整数形式应该是:65-48-7=65-55=10,因此字符'A'-字符'F'转换成整数形式应该减去55。
import java.util.Scanner;
import java.math.BigDecimal;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (sc.hasNext()) {
String input = sc.next();
StringBuilder sb = new StringBuilder();
sb.append(input);
String str = sb.reverse().substring(0, sb.length()-2);
char[] arr = str.toCharArray();
int sum = 0;
for (int i=0; i<arr.length; i++) {
if (arr[i]>='A' && arr[i]<='F') {
sum += (Integer.valueOf(arr[i])-55)*Math.pow(16, i);
} else {
sum += (Integer.valueOf(arr[i])-48)*Math.pow(16, i);
}
}
System.out.println(sum);
}
}
}
2、利用Java自带的API
Integer的parse(s, radix)方法,s为输入字符串,radix为进制数,返回值为int型
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (sc.hasNext()) {
String input = sc.next();
System.out.println(Integer.parseInt(input.substring(2), 16));
}
}
}
Integer的decode()方法,将String解码为Integer,String可以是十进制、十六机制、八进制(0表示八进制,ox\0X\#表示十六机制,什么都不写表示十进制,例如-0X123就是表示十六机制的字符串,其中符号位为-)
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (sc.hasNext()) {
String input = sc.next();
System.out.println(Integer.decode(input));
}
}
}
3、考虑大数据的情况
如果输入是超大数据的情况下,int、long都会越界,这时,我们就需要输出十进制数的字符串表达。
除了大数情况,其实有时还需要校验输入的合法性。
import java.util.Scanner;
import java.math.BigDecimal;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (sc.hasNext()) {
String input = sc.next();
String str = input.substring(2);
char[] arr = str.toCharArray();
int len = str.length();
BigDecimal result = new BigDecimal(0);
BigDecimal carry = new BigDecimal(16);
for (char ch : arr) {
len--;
if (ch >= 'A') {
BigDecimal temp = new BigDecimal(ch).subtract(new BigDecimal(55));
BigDecimal t = temp.multiply(carry.pow(len));
result = result.add(t);
} else {
BigDecimal temp = new BigDecimal(ch).subtract(new BigDecimal(48));
BigDecimal t = temp.multiply(carry.pow(len));
result = result.add(t);
}
}
System.out.println(result);
}
}
}
上一篇: ajax与数据库的应用之注册,登录,建表,删除,修改,模糊查询
下一篇: 解决SystemError: new style getargs format but argument is not a tuple
推荐阅读
-
string '??54' (length=8)用什么函数能转换成int类型的?解决思路
-
用Access将XLS与MDB文件格式互相转换
-
php转换颜色为其反色的方法_PHP教程
-
如何用asp把sqlserver数据转换为execl文件
-
PHP如何实现Unicode和Utf-8编码相互转换_PHP
-
js中将字符串转换成json的三种方式_json
-
JavaEE基础day02 1.定义Java中的变量 四类八种 2.变量定义和使用的注意事项 3.数据类型的转换、强制数据类型转换4.算数运算符、比较运算符、逻辑运算符、赋值运算符、三元运算符
-
php 函数将16进制颜色代码转换为 RGB 色值
-
php中将网址转换为超链接的函数_PHP
-
转换为标准IPv4格式