一、题目内容java
[编程题]进制转换编程
写出一个程序,接受一个十六进制的数值字符串,输出该数值的十进制字符串。(多组同时输入 ) 输入描述: 输入一个十六进制的数值字符串。 输出描述: 输出该数值的十进制字符串。 输入例子: 0xA 输出例子: 10
二、题目解析数组
方法1:将十六进制的数值字符串转换成十进制字符串,用Integer类的app
public static int parseInt(String s,int radix)
throws NumberFormatException测试
方法:使用第二个参数指定的基数,将字符串参数解析为有符号的整数。ui
由于十六进制的数值字符串的前两个字符是0和X,因此要截取字符串前两个字符以后的子串再解析成整形。code
代码以下:orm
import java.util.Scanner; public class Main{ public static void main(String[]args){ Scanner sc = new Scanner(System.in); while(sc.hasNext()){//多个测试用例用while(sc.hasNext()){} String s = sc.next().substring(2); System.out.println(Integer.parseInt(s,16)); } } }
方法2:本身写转换方法对象
用一个字符串可变序列StringBuilder来接收输入的十六进制的数值字符串,由于十六进制的数值字符串的前两个字符是0和X,因此要截取字符串前两个字符以后的子串,用获得的子串转换成10进制。例如:0x12转换成10进制为1乘以16的1次方加上2乘以16的0次方(1*16^1+2*16^0;),观察16的幂正好是字符串中的字符倒序以后的下标,即字符值乘以16的字符下标次方。因此要反转字符串,再将字符串转化成字符数组,遍历字符数组在经过上述方法转换成10进制。字符串
步骤
一、建立扫描器对象(Scanner sc = new Scanner(System.in))
二、为实现多用例测试;使用while(sc.hasNext()){}来判断是否还有输入。
三、在while循环里实现转换功能。
四、建立一个字符串可变序列StringBuilder对象;
五、将键盘录入的字符串值添加到字符串可变序列
六、将字符串可变序列对象反转并截取,获得一个新的字符串。
七、将新的字符串转化成字符数组
八、定义一个int型的变量,装载转换后的10进制值。
九、遍历字符数组,判断每一个字符。由于十六进制的a(A)->10,b(B)->11,c(C)->12,d(D)->13,e(E)->14,f(F)->15.超出F就不是16进制数啦。
for(int i=0;i<ch.length;i++){ if(ch[i]>='A'&&ch[i]<='F'){ sum+=(ch[i]-55)*Math.pow(16, i); }else if(ch[i]>='a'&&ch[i]<='f'){ sum+=(ch[i]-87)*Math.pow(16, i); }else if(ch[i]>='0'&&ch[i]<='9'){ sum+=(ch[i]-48)*Math.pow(16, i); }else{ System.out.println("输入的字符串不是十六进制形式!"); } }
十、输出int型的变量就是转换后的10进制数啦。
代码以下:
import java.util.Scanner; public class Main{ public static void main(String[]args){ /*Scanner sc = new Scanner(System.in); while(sc.hasNext()){ String s = sc.next().substring(2); System.out.println(Integer.parseInt(s,16)); }*/ Scanner sc = new Scanner(System.in); //不用Integer类的方法转换,本身转换 while(sc.hasNext()){ StringBuilder sb = new StringBuilder(); sb.append(sc.next()); String s = sb.reverse().substring(0, sb.length()-2); char[]ch = s.toCharArray() int sum = 0; for(int i=0;i<ch.length;i++){ if(ch[i]>='A'&&ch[i]<='F'){ sum+=(ch[i]-55)*Math.pow(16, i); }else if(ch[i]>='a'&&ch[i]<='f'){ sum+=(ch[i]-87)*Math.pow(16, i); }else if(ch[i]>='0'&&ch[i]<='9'){ sum+=(ch[i]-48)*Math.pow(16, i); }else{ System.out.println("输入的字符串不是十六进制形式!"); } } System.out.println(sum); } } }