2012-04-17 119 views
5

我想通過使用轉換將基數10數字轉換爲任何基數。現在這是我提出的代碼。我有一種悲傷的感覺,這可能是完全錯誤的。下面的圖片是這個過程應該如何發生的例子。Java - 遞歸程序 - 將基數10的數字轉換爲任何基數

http://i854.photobucket.com/albums/ab107/tonytauart/rrrr.png

public static void main(String[] args) { 


    int base; 
    int number; 


    Scanner console = new Scanner(System.in); 

    System.out.println("Please enter the base"); 
     base = console.nextInt(); 
    System.out.println("Please enter the Number you would like to convert"); 
     number = console.nextInt(); 

     System.out.println(Converter(base, number)); 
} 


public static int Converter(int Nbase, int Nnumber){ 

    int answer; 
    int Rcontainer =0; 
    int cnt = 0; 
    int multiplier; 
    int temp; 
    double exp; 

    if(Nnumber/Nbase == 0){ 
     cnt++; 
     exp = Math.pow(10,cnt); 
     multiplier = (int)exp; 
     answer = (Nnumber%Nbase)* multiplier + Rcontainer; 


    } 
    else 
     { 
     exp = Math.pow(10,cnt); 
     multiplier = (int)exp; 
     cnt++; 
     temp = Rcontainer; 
     Rcontainer = (Nnumber%Nbase)* multiplier + temp; 

     Nnumber = Nnumber/Nbase; 
     answer = Converter(Nbase,Nnumber); 
     } 
     return answer; 
} 

}

+0

這功課呢?如果是這樣,它應該標記[家庭作業]標籤。 – 2012-04-17 03:20:32

+0

你應該定義一個基本情況,比如說,當你的數字小於你的基數,並且遞歸部分,比方說,獲得轉換後數字 – 2012-04-17 03:21:04

+0

的下一個數字的操作,感謝luiggi,Idk爲什麼我認爲== 0是一個好主意。我不認爲現在甚至需要我看它 – user878034 2012-04-17 03:35:53

回答

9
public class Converter { 

    private static char symbols[] = new char[] { '0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T' }; 

    public static void main (String args[]) 
    { 
       Converter converter = new Converter(); 
     System.out.println(converter.convert (31, 16)); 
    } 

    public String convert (int number, int base) 
    { 
     return convert(number, base, 0, ""); 
    } 

    private String convert (int number, int base, int position, String result) 
    { 
     if (number < Math.pow(base, position + 1)) 
     { 
      return symbols[(number/(int)Math.pow(base, position))] + result; 
     } 
     else 
     { 
      int remainder = (number % (int)Math.pow(base, position + 1)); 
      return convert ( number - remainder, base, position + 1, symbols[remainder/(int)(Math.pow(base, position))] + result); 
     } 
    } 
} 

這將轉換從基地2至底座36,雖然你可以通過添加更多的符號展開它。

+0

謝謝!很有幫助! – user878034 2012-04-17 10:54:22

2

如果你只是想轉換鹼(如基地2),請嘗試以下代碼:

Integer.parseInt(Integer.toString(numberToConvert,base))

對於特異性鹼基2:

Integer.parseInt(Integer.toBinaryString(numberToConvert))

Integer包含其他諸如可以使用的toHexString之類的方法。這些假定numberToConvert是以10爲底。

+0

聰明的解決方案! – 2013-08-26 17:28:58

10

我剛剛完成了一個關於comp sci類的這個問題。我不得不遞歸解決這個問題:

public static String convert(int number, int base) 
{ 
    int quotient = number/base; 
    int remainder = number % base; 

    if (quotient == 0) // base case 
    { 
     return Integer.toString(remainder);  
    } 
    else 
    { 
     return convert(quotient, base) + Integer.toString(remainder); 
    }    
} 
+1

我想我們是從同一本書中學習的。這正是我需要的! – 2014-03-06 17:05:01

3

我不喜歡寫整個程序,但我認爲快速的方法來做到這一點在Java中是這樣的:

Integer.toString(int i,int radix); 

例如,

Integer.toString(255,2) 

將返回「11111111」。我不確定您是否只是尋找快速解決方案,或者您是否真的想自己實施轉換方法。這將是一個快速解決方案。參考這篇文章:What is the method in the API for converting between bases?

+0

然而,第二個參數在給定> Character.MAX_RADIX時默認爲10,對於第二個參數,通常爲36(對於0-9爲10,對於字母表爲26)。 – Ryan 2014-12-08 17:49:12

1
public class Converter { 

    private static char symbols[] = new char[]{'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 
        'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T' }; 

    public static void main(String args[]) { 
     Converter converter = new Converter(); 
     System.out.println(converter.convert(31, 16)); 
    } 

    public String convert(int number, int base) { 
     return convert(number, base, 0, ""); 
    } 

    private String convert(int number, int base, int position, String result) { 
     if (number < Math.pow(base, position + 1)) { 
      return symbols[(number/(int) Math.pow(base, position))] + result; 
     } else { 
      int remainder = (number % (int) Math.pow(base, position + 1)); 
      return convert(number - remainder, base, position + 1, symbols[remainder/(int) (Math.pow(base, position))] + result); 
     } 
    } 

} 
相關問題