java - 十进制递归将整数转换为字符串
问题描述
我不知道如何为字符串值分配一个数字并使其自动识别以使该数字成为字符串值。问题如下:
递归编写该方法: 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;
}
}
}
解决方案
你几乎正确地完成了#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
推荐阅读
- oauth - Terraform 用户的 Oauth 身份验证,而不是指定秘密/访问密钥
- javascript - 当我在这样的对象数组上使用 reduce 方法时,我得到一个“NaN”
- android - 如果文本太长,为什么 Snackbar 文本会消失?
- javascript - Javascript - Laravel(刀片)
- java - 无法遍历 Jsp 中的列表
- javascript - 使用 php 或 ajax 将 id 发送到模态
- clojure - Clojure - 创建一个无除数函数
- rest - 尝试将时间戳作为请求参数发送到我的 REST API 时收到 400
- php - Wordpress 检查 slug 的任何部分是否存在
- ruby-on-rails - Bundler:您必须使用 Bundler 2 或更高版本与此锁定文件