2016-02-29 153 views
0

我必須創建一個遞歸方法將基數10轉換爲任何基數。 http://i.stack.imgur.com/nJMmm.jpg數字基數轉換遞歸方法

  • 如果base爲2,然後用 「0b」 時前綴字符串
  • 如果鹼16然後前綴以 「0x」
  • 如果base爲10,則沒有前綴(或後綴)
  • 字符串在所有其他情況下
  • postfix的用方括號

實例底部的字符串:

  • 如果值是212和基爲2,則該方法返回「0b11010100」
  • 如果值是212和底座是10,則該方法返回「212」
  • 如果值是212和底座是12,則該方法返回「119 [底座12]」
  • 如果值是212和底座是20,則該方法返回「AC [基座20]」
  • 如果值是212和底座是16,則該方法返回「0xD4」
  • 如果值爲212且基數爲60,則方法返回「3.32 [基數爲60]」

我的問題是與「在所有其他情況下後綴字符串與方括號中的基地」位。我想不明白。你能幫忙嗎?

這裏是我的通用解決方案:

public class NaturalNumber { 
private int value; 

public NaturalNumber(int value){ 
    this.value = value; 
} 

public void setValue(int value){ 
    this.value = value; 
} 

public int getValue(){ 
    return value; 
} 


@Override 
public String toString() { 
    return Integer.toString(value); 
} 

public String getValueBase(int base){ 
    return getValueBase(value, base); 
} 

public static String getValueBase(int value, int base){ 
    int quotient = value/base; 
    int remainder = value % base; 
    char ch = (char)(remainder+55); 



    if(quotient <= 0) { 
     if(remainder >= 10 && remainder <= 36){ 
      if(base==16) 
       return "0x" + ch; 
      return "" + ch; 
     } 
     else { 

      if(base==2) 
       return "0b" + remainder; 
      if(base==16) 
       return "0x" + remainder; 
      return "" + remainder; 
     } 
    } 
    else 
    { 

     if(base > 36){ 
      return getValueBase(quotient, base) + "." + remainder; 
     } 
     if(remainder >= 10 && remainder <= 36){ 
      return getValueBase(quotient, base) + ch; 
     } 
     return getValueBase(quotient, base) + remainder; 
    } 
} 

public static void main(String[] args) { 
    NaturalNumber n = new NaturalNumber(68654332); 
    System.out.println(n.getValueBase(38)); 
} 
} 
+1

您還沒有提問。 – shmosel

+0

我的問題是在最後加入[base]。你能幫忙嗎? – Isidore

+0

仍然沒有問題。 – shmosel

回答

0

你思考這個錯誤,這並不在遞歸循環來完成。雖然如果您在循環中一直傳遞數字庫,您可以在循環的基本情況下將其添加到最後。否則,你將不得不通過某種類型的參數(布爾值),該參數在函數的第一次調用中僅爲真。

public String getValueBase(int base){ 
     switch (base){ 
      case 2: 
       return "0b" + getValueBase(value, base) ; 
      case 10: 
       return "0x" + getValueBase(value, base) ; 
      default: 
       return getValueBase(value, base) + "[base" + base + "]" ; 
     } 


    } 

遞歸堆棧中最後一個方法調用中的後綴添加。

public static String getValueBase(int value, int base){ 

     int quotient = value/base; 
     int remainder = value % base; 

     if(quotient == 0){ 
      //Base case + Postfix 
      return remainder + (base != 2 && base != 16 && base != 10) ? "[base"+base+"]" : ""; 
     } 
     else 
      // Another recursive call 
      return getValueBase(remainder, base); 


    } 
+0

謝謝,但我的任務需要一個方法內解決方案 – Isidore

+0

然後,你需要第三個參數給你的method.public static String getValueBase(int value,int base,boolean postfix) – heniv181

+0

用後綴添加更新。此外,您的解決方案中有許多「神奇數字」,因此容易出錯。如果價值是負數呢? – heniv181