2012-04-17 22 views
5

Tôi đang cố gắng chuyển đổi số cơ sở 10 thành bất kỳ cơ sở nào bằng cách sử dụng chuyển đổi. Ngay bây giờ đây là mã tôi đã đưa ra. Tôi có cảm giác buồn, điều này có thể hoàn toàn sai. Hình ảnh dưới đây là một ví dụ về quá trình này sẽ diễn ra như thế nào.Java - Chương trình đệ quy - Chuyển đổi số cơ sở 10 thành bất kỳ Căn cứ

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

Đây có phải là bài tập về nhà không? Nếu có, nó sẽ được dán nhãn bằng thẻ [bài tập về nhà]. –

+0

bạn nên xác định trường hợp cơ sở, giả sử khi số của bạn nhỏ hơn số cơ sở của bạn và phần đệ quy, hãy nói rằng các hoạt động để có được chữ số tiếp theo của số được chuyển đổi –

+0

cảm ơn người đứng đầu lên ... và cảm ơn cũng luiggi, Idk lý do tại sao tôi nghĩ rằng có == 0 là một ý tưởng tốt. Tôi không nghĩ rằng ngay cả cần thiết bây giờ mà tôi nhìn vào nó – user878034

Trả lời

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); 
     } 
    } 
} 

này sẽ chuyển đổi từ cơ sở 2 đến cơ sở 36, mặc dù bạn có thể mở rộng nó bằng cách thêm các biểu tượng.

+0

Cảm ơn bạn! Rất hữu ích! – user878034

2

Nếu bạn đang cố gắng để chuyển đổi căn cứ (như để cơ sở 2), hãy thử đoạn mã sau:

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

Đối đặc biệt căn 2:

Integer.parseInt(Integer.toBinaryString(numberToConvert))

Integer chứa khác các phương thức như toHexString có thể được sử dụng. Những giả định rằng numberToConvert là trong cơ sở 10.

+0

Giải pháp thông minh! –

10

Tôi vừa hoàn thành việc này cho một lớp sci comp. Tôi phải giải quyết việc này một cách đệ quy:

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

Tôi nghĩ chúng tôi đang học từ cùng một cuốn sách. Đây chính xác là những gì tôi cần! –

3

Tôi không cảm thấy giống như viết toàn bộ chương trình, nhưng tôi nghĩ rằng cách nhanh nhất để làm điều đó trong Java là thế này:

Integer.toString(int i,int radix); 

Ví dụ,

Integer.toString(255,2) 

sẽ trả về "11111111". Tôi không chắc liệu bạn có đang tìm giải pháp nhanh hay bạn thực sự muốn tự mình triển khai phương pháp chuyển đổi. Đây sẽ là một giải pháp nhanh chóng. Tham khảo bài đăng này: What is the method in the API for converting between bases?

+0

Tuy nhiên, đối số thứ hai mặc định là 10 nếu được đưa ra> 'Character.MAX_RADIX', thường là 36 (10 cho 0-9, 26 cho bảng chữ cái) cho đối số thứ hai. – Ryan

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); 
     } 
    } 

} 
Các vấn đề liên quan