我必须创建一个递归方法,将基数为10的数字转换为任何基数。 http://i.stack.imgur.com/nJMmm.jpg
示例:
我的问题是“在所有其他情况下使用方括号中的字符串后缀字符串”位。我想不明白。你能帮忙吗?
这是我的一般解决方案:
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));
}
}
答案 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);
}