首页 > 解决方案 > 十进制递归将整数转换为字符串

问题描述

我不知道如何为字符串值分配一个数字并使其自动识别以使该数字成为字符串值。问题如下:

递归编写该方法: 1) 考虑在小于 12 时仅返回数字本身的基本情况(除以 12 时商为 0,余数为数字)。如果数字是 10 或 11,则返回“A”或“B”。

2)考虑数字大于或等于12的递归情况。在这种情况下,首先使用商递归调用方法并将结果(使用+运算符连接字符串)与另一个递归调用的结果使用剩下的。返回两个递归调用的连接结果。

一个例子; 20A 将是:

2 x 12^2 + 0 x 12^1 + 10 x 12^0 = 2 x 144 + 0 x 12 + 10 x 1 = 288 + 0 + 10 = 298

我知道代码现在完全错误

public class Duodecimal {
  public static String toBase12(int n) {
    //TODO: complete this method
    if (n==10)
    return "A";
    if (n==11)
    return "B";
    if (n<12)
    return n;
    else {
      if (n%12==10)
      return (n/12 + "A");
      if (n%12==11)
      return (n/12 + "B");
      else
      return n/12;
    }
  }
}

标签: javarecursion

解决方案


你几乎正确地完成了#1(return n编译失败),所以让我们看看#2:

考虑大于或等于 12 的数字的递归情况。在这种情况下,首先使用商递归调用该方法,然后使用余数将结果(使用 + 运算符连接字符串)与另一个递归调用的结果连接起来. 返回两个递归调用的连接结果。

让我们一步一步来,处理大胆的部分。

首先使用商递归调用方法

int quotient = n / 12;

首先使用商递归调用方法

toBase12(quotient)

使用余数的另一个递归调用的结果

int remainder = n % 12

使用余数的另一个递归调用的结果

toBase12(remainder)

[...] 并将结果(使用 + 运算符连接字符串)与 [... ]

toBase12(quotient) + toBase12(remainder)

返回两个递归调用的连接结果

让我们也消除变量:

return toBase12(n / 12) + toBase12(n % 12)

如您所见,作业包括您应该做什么的分步说明。您所要做的就是编写向您解释的代码。

最终结果是:

public static String toBase12(int n) {
    if (n < 10)
        return Integer.toString(n); // or  String.valueOf(n)  or  "" + n
    if (n == 10)
        return "A";
    if (n == 11)
        return "B";
    return toBase12(n / 12) + toBase12(n % 12);
}

测试

System.out.println(toBase12(298));

输出

20A

推荐阅读