一、題目內容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); } } }