[編程題]進制轉換

一、題目內容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);
        }   
    }
}
相關文章
相關標籤/搜索