为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

不负相思意 2023-10-19 21:47:51
我不知道如何为字符串值分配一个数字并使其自动识别以使数字成为字符串值。问题如下:递归地编写该方法: 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;    }  }}
查看完整描述

3 回答

?
繁花如伊

TA贡献2012条经验 获得超12个赞

你几乎正确地完成了#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


查看完整回答
反对 回复 2023-10-19
?
慕森王

TA贡献1777条经验 获得超3个赞

在一张纸上,你可以这样写:

  1. 将输入除以十二并保存余数。

  2. 将结果再次除以十二并保存余数。

  3. 继续第二步,直到结果为零。从下到上连接每个步骤的余数。

使用您的示例输入:

298 / 12 = 24 rem 10 (A)
 24 / 12 = 2  rem 0
  2 / 12 = 0  rem 2

因此

298 in base 10 = 20A in base 12


查看完整回答
反对 回复 2023-10-19
?
胡说叔叔

TA贡献1804条经验 获得超8个赞

这是一种使用尾递归来实现的方法。第二种方法会累积,直到减到零,然后返回。


public class Base12 {

    public static String toBase12(int n) {

        return toBase12(n, "");

    }


    private static String toBase12(int n, String value) {

        return n <= 0 ? value : toBase12(n/12, toBase12Char(n%12) + value);

    }


    private static char toBase12Char(int n) {

        return n == 11 ? 'B' : (n == 10 ? 'A' : Integer.toString(n).charAt(0));

    }

}


public class Base12Test {

    @Test

    public void Test20A() {

        int n = 298;


        String expectedValue = "20A";

        String actualValue = Base12.toBase12(n);


        Assert.assertEquals(expectedValue, actualValue);

    }

}


查看完整回答
反对 回复 2023-10-19
  • 3 回答
  • 0 关注
  • 122 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信