如何将整数转换为数字列表[请阅读页面中的详细信息]
How to convert integer to a list of digital [please read detail in page]
我最好用一个例子来表达这一点,我正在尝试编写一个程序,假设我有一个这样的函数:
static List<Integer> int2List(int l, int base)
输入输出应该是
l=0, base=3, return {1}
l=1, base=3, return {2}
l=2, base=3, return {3}
l=3, base=3, return {1,1}
l=4, base=3, return {1,2}
l=5, base=3, return {1,3}
l=6, base=3, return {2,1}
l=7, base=3, return {2,2}
l=8, base=3, return {2,3}
l=9, base=3, return {3,1}
l=10, base=3, return {3,2}
l=11, base=3, return {3,3}
l=12, base=3, return {1,1,1}
l=13, base=3, return {1,1,2}
l=14, base=3, return {1,1,3}
...
这很像递归 mod 但有一些条件我想不通。
谢谢
感谢大家的意见,我已经更新了问题内容和方法签名,我想显示一个列表的内容,但忘记在元素之间添加逗号。
这是我的代码,它还不正确,但我想你可以从中得到一些意义。它也很像 Long.toString(int i, int radix),不同之处在于首先我需要添加那些前导零,其次我需要对列表中的每个元素做一个“+1”,但是做那也不给我正确的...
static List<Integer> int2List(int l, int base) {
// String s = Long.toString(l,base);
List<Integer> list = new ArrayList<Integer>();
int k = l % base;
int j = l / base;
int m = 0;
list.add((int) (k + 1));
while (j > base) {
k = j % base;
list.add((int) (k));
if (j == base)
break;
j = j / base;
}
if (j == base) {
list.add((int) (j));
} else {
if (j > 0) {
list.add((int) (j));
}
}
Collections.reverse(list);
return list;
}
我知道我在第一个版本中犯的错误,我现在修正我的错误并更新问题更具体,你能删除 "not worth reading" 吗,我真的欣赏..
===================
嗯,该方法应该是在循环中使用,这样它会输出范围[1,base]内的数字组成的所有可能的序列,而l
可以看作是一个索引.
我认为你的方法签名是错误的。该函数似乎将数值转换为它的基本表示形式。
这意味着 return 值必须包含字符串。
你为什么要使用 List<...> 我不清楚。
这个怎么样?
static List<Integer> int2List(int l, int base)
{
List<Integer> list = new ArrayList<Integer>();
int n;
l++;
while(l > 0)
{
n = (l-1) % base;
list.add(0, (int) n+1);
l = (l-n)/base;
}
return list;
}
我最好用一个例子来表达这一点,我正在尝试编写一个程序,假设我有一个这样的函数:
static List<Integer> int2List(int l, int base)
输入输出应该是
l=0, base=3, return {1}
l=1, base=3, return {2}
l=2, base=3, return {3}
l=3, base=3, return {1,1}
l=4, base=3, return {1,2}
l=5, base=3, return {1,3}
l=6, base=3, return {2,1}
l=7, base=3, return {2,2}
l=8, base=3, return {2,3}
l=9, base=3, return {3,1}
l=10, base=3, return {3,2}
l=11, base=3, return {3,3}
l=12, base=3, return {1,1,1}
l=13, base=3, return {1,1,2}
l=14, base=3, return {1,1,3}
... 这很像递归 mod 但有一些条件我想不通。
谢谢
感谢大家的意见,我已经更新了问题内容和方法签名,我想显示一个列表的内容,但忘记在元素之间添加逗号。
这是我的代码,它还不正确,但我想你可以从中得到一些意义。它也很像 Long.toString(int i, int radix),不同之处在于首先我需要添加那些前导零,其次我需要对列表中的每个元素做一个“+1”,但是做那也不给我正确的...
static List<Integer> int2List(int l, int base) {
// String s = Long.toString(l,base);
List<Integer> list = new ArrayList<Integer>();
int k = l % base;
int j = l / base;
int m = 0;
list.add((int) (k + 1));
while (j > base) {
k = j % base;
list.add((int) (k));
if (j == base)
break;
j = j / base;
}
if (j == base) {
list.add((int) (j));
} else {
if (j > 0) {
list.add((int) (j));
}
}
Collections.reverse(list);
return list;
}
我知道我在第一个版本中犯的错误,我现在修正我的错误并更新问题更具体,你能删除 "not worth reading" 吗,我真的欣赏..
===================
嗯,该方法应该是在循环中使用,这样它会输出范围[1,base]内的数字组成的所有可能的序列,而l
可以看作是一个索引.
我认为你的方法签名是错误的。该函数似乎将数值转换为它的基本表示形式。
这意味着 return 值必须包含字符串。
你为什么要使用 List<...> 我不清楚。
这个怎么样?
static List<Integer> int2List(int l, int base)
{
List<Integer> list = new ArrayList<Integer>();
int n;
l++;
while(l > 0)
{
n = (l-1) % base;
list.add(0, (int) n+1);
l = (l-n)/base;
}
return list;
}