2017-01-24 2 views
-2

Я бы лучше выразить это с примером, я пытаюсь написать программу, скажем, у меня есть функция, как это:Как преобразовать целое число в список цифрового [читайте подробности в странице]

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} 

... Это совсем как рекурсивно мод, но есть некоторые условия, я не могу понять.

Благодаря

спасибо за все ваши комментарии и я обновил содержание вопроса и подпись метода, я хотел, чтобы отобразить содержимое списка, и я забыл добавить запятую между элементами.

Итак, вот мой код, это еще не совсем верно, но я думаю, вы можете получить от него какой-то смысл. Это также очень похоже на 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; 
    } 

Я знаю об ошибках, которые я сделал в первой версии, теперь я могу исправить свои ошибки и обновить вопрос, чтобы быть более конкретным, вы можете удалить «не стоит читать», пожалуйста, я буду очень признателен ..

===================

Мда, метод должен быть использован в петля, так что она выведет всю возможную последовательность s, состоящий из числа в диапазоне [1, base], а l можно рассматривать как индекс.

+0

Ваш пример не имеет большого смысла. Почему вы хотите получить один список значений, а не просто вернуть значение? Можете ли вы объяснить, что должен сделать ваш метод? –

+0

Почему он возвращает список? – maszter

+0

из того, что вы показали, похоже, что функция увеличивает как входной номер, так и базу на 1, а затем возвращает представление измененной базы. – Shiping

ответ

2

Как насчет этого?

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; 
} 
+0

выглядит неплохо, однако вам все равно придется вспять список – maszter

+0

@maszter, вы правы. новая цифра должна быть добавлена ​​в начале, а не в конце. Я исправил это. Благодарю. – Shiping

+0

, вероятно, более эффективно добавлять новые цифры в конце и отбрасывать их в конце. – Shiping

0

Я думаю, что ваша подпись метода неправильная. Кажется, что функция преобразует числовое значение в базовое представление.

Это означает, что возвращаемое значение должно содержать строку.

По какой причине вы используете Список < ...> для меня непонятно.

Смежные вопросы