十二进制递归将整数转换为字符串

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


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


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


一个例子; 20A 是:


2×12^2 + 0×12^1 + 10×12^0 = 2×144 + 0×12 + 10×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;

    }

  }

}


不负相思意
浏览 123回答 3
3回答

繁花如伊

你几乎正确地完成了#1(return n无法编译),所以让我们看看#2:考虑数字大于或等于 12 的递归情况。在这种情况下,首先使用商递归调用该方法,然后使用余数将结果(使用 + 运算符连接字符串)与另一个递归调用的结果连接起来。返回两个递归调用的串联结果。让我们一步一步来,处理大胆的部分。首先使用商递归调用该方法int&nbsp;quotient&nbsp;=&nbsp;n&nbsp;/&nbsp;12;首先使用商递归调用该方法toBase12(quotient)使用余数的另一个递归调用的结果int&nbsp;remainder&nbsp;=&nbsp;n&nbsp;%&nbsp;12使用余数的另一个递归调用的结果toBase12(remainder)[...] 并将结果(使用 + 运算符连接字符串)与 [...] 连接起来toBase12(quotient)&nbsp;+&nbsp;toBase12(remainder)返回两个递归调用的串联结果我们也消除变量:return&nbsp;toBase12(n&nbsp;/&nbsp;12)&nbsp;+&nbsp;toBase12(n&nbsp;%&nbsp;12)正如您所看到的,作业包括您应该做什么的分步说明。您所要做的就是编写向您解释的代码。最终结果是:public static String toBase12(int n) {&nbsp; &nbsp; if (n < 10)&nbsp; &nbsp; &nbsp; &nbsp; return Integer.toString(n); // or&nbsp; String.valueOf(n)&nbsp; or&nbsp; "" + n&nbsp; &nbsp; if (n == 10)&nbsp; &nbsp; &nbsp; &nbsp; return "A";&nbsp; &nbsp; if (n == 11)&nbsp; &nbsp; &nbsp; &nbsp; return "B";&nbsp; &nbsp; return toBase12(n / 12) + toBase12(n % 12);}测试System.out.println(toBase12(298));输出20A

慕森王

在一张纸上,你可以这样写:将输入除以十二并保存余数。将结果再次除以十二并保存余数。继续第二步,直到结果为零。从下到上连接每个步骤的余数。使用您的示例输入:298&nbsp;/&nbsp;12&nbsp;=&nbsp;24&nbsp;rem&nbsp;10&nbsp;(A) &nbsp;24&nbsp;/&nbsp;12&nbsp;=&nbsp;2&nbsp;&nbsp;rem&nbsp;0 &nbsp;&nbsp;2&nbsp;/&nbsp;12&nbsp;=&nbsp;0&nbsp;&nbsp;rem&nbsp;2因此298&nbsp;in&nbsp;base&nbsp;10&nbsp;=&nbsp;20A&nbsp;in&nbsp;base&nbsp;12

胡说叔叔

这是一种使用尾递归来实现的方法。第二种方法会累积,直到减到零,然后返回。public class Base12 {&nbsp; &nbsp; public static String toBase12(int n) {&nbsp; &nbsp; &nbsp; &nbsp; return toBase12(n, "");&nbsp; &nbsp; }&nbsp; &nbsp; private static String toBase12(int n, String value) {&nbsp; &nbsp; &nbsp; &nbsp; return n <= 0 ? value : toBase12(n/12, toBase12Char(n%12) + value);&nbsp; &nbsp; }&nbsp; &nbsp; private static char toBase12Char(int n) {&nbsp; &nbsp; &nbsp; &nbsp; return n == 11 ? 'B' : (n == 10 ? 'A' : Integer.toString(n).charAt(0));&nbsp; &nbsp; }}public class Base12Test {&nbsp; &nbsp; @Test&nbsp; &nbsp; public void Test20A() {&nbsp; &nbsp; &nbsp; &nbsp; int n = 298;&nbsp; &nbsp; &nbsp; &nbsp; String expectedValue = "20A";&nbsp; &nbsp; &nbsp; &nbsp; String actualValue = Base12.toBase12(n);&nbsp; &nbsp; &nbsp; &nbsp; Assert.assertEquals(expectedValue, actualValue);&nbsp; &nbsp; }}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java