数字基本转换递归方法

时间:2016-02-29 06:24:45

标签: java recursion

我必须创建一个递归方法,将基数为10的数字转换为任何基数。 http://i.stack.imgur.com/nJMmm.jpg

  • 如果base为2,则在字符串前加上“0b”
  • 如果base为16,则在字符串前加上“0x”
  • 如果base是10则没有前缀(或后缀)
  • 在所有其他情况下使用方括号中的基数后缀字符串

示例:

  • 如果值为212且base为2,则该方法返回“0b11010100”
  • 如果值为212且base为10,则该方法返回“212”
  • 如果值为212且base为12,则该方法返回“119 [base 12]”
  • 如果值为212且base为20,则该方法返回“AC [base 20]”
  • 如果值为212且base为16,则该方法返回“0xD4”
  • 如果值为212且base为60,则该方法返回“3.32 [base 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 个答案:

答案 0 :(得分: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);


    }