2012-08-10 3 views
0

Я пытаюсь найти некоторые проблемы в сети. Я запрограммировал, как решить самый большой продукт палиндрома из двух двузначных чисел. Например, 91 * 99 = 9009. Мне удалось сделать это, используя рекурсивную функцию, но мне интересно, как я могу это сделать с помощью массивов, подобных этому?Сохранение вычисленных значений в массив

product[0]=9; 
product[1]=0; 
product[2]=0; 
product[3]=9; 

или если вычисленный продукт 969;

product[0]=9; 
product[1]=6; 
product[2]=9; 

Затем я вывешу его, начиная с последнего индекса, до первого индекса, затем проверяет, совпадает ли его с исходным номером.

EDIT: Мой вопрос в том, как я могу хранить вычисленный продукт в массиве?

+0

Вы также должны изменить имя вопроса. –

+0

Непонятно, почему вы думаете, что использование массива поможет. Вы можете сделать итерационное решение без использования массива. Подсказка: 'String.charAt'. –

+0

Если его палиндром, то просто добавьте значения внутри 'List li = new ArrayList (); while (продукт> 0) {li.add (продукт% 10); product/= 10;} 'и проверить, является ли список' li' палиндромным массивом. –

ответ

1

Нет причин для решения этой проблемы Project Euler с использованием массивов. Но если вы зацепились за это, тогда есть простой алгоритм для преобразования массива цифр в число. Просто сделайте это:

int number = 0; 
int number_2 = 0; 

//going forwards: 
for (int i = 0; i < array.length; i++) 
{ 
    number = number * 10 + array[i]; 
} 

//going backwards: 
for (int i = array.length - 1; i >= 0; i--) 
{ 
    number_2 = number_2 * 10 + array[i]; 
} 

if (number == number_2) 
{ 
    //you have a palindrome 
} 

Это не самый эффективный метод, я знаю (@ Nandkumar является быстрее), но это на самом деле очень просто, это то, что я стремился.

0

Я не буду писать вам код, потому что это похоже на задание, но я дам вам подсказку.

Сначала преобразуйте int в строку.

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

1

Создайте новый String из целочисленного продукта.

+0

Я удалил проголосовавший голос, и причина понижающего голоса просто превратилась в 'String', и он не ответил бы на его« измененный »вопрос. 'EDIT: Мой вопрос в том, как я могу хранить вычисленный продукт в массиве?' – SiB

+0

Строки имеют массивы символов, поэтому все, что вам нужно, это запросить представление из класса String. Я пытался не разрешать эту домашнюю работу, как вопрос для ОП. – dcow

0

Для преобразования числа в массив, вы можете попробовать это ...

Char [] product = String.valueOf("969").toCharArray(); 
+1

OP не спрашивает, как проверить, является ли массив палиндром. – dcow

+2

Затем удалите ответ, поскольку он больше не относится к заданному вопросу. Не отвечая на вопрос, это вполне обоснованная причина для downvote. – dcow

+0

Как вы предлагаете OP получить строковый литерал «939» из произведения двух целых переменных? – dcow

0

Обеспечьте свой продукт String.valueOf(int), он будет преобразован в строку, а затем преобразовать его в массив, используя String.toCharArray() как

boolean palindrome = true; 
int product = 9009; // or any calculated number 
char str[] = String.valueOf(product).toCharArray(); 

for(int i=0,j=str.length-1; i!=j ;i++,j--) { 
    if(str[i] == str[j]){ 
     continue; 
    } else { 
     palindrome = false; 
     break; 
    } 
} 
+0

ohh. Понимаю. Мне не хватало .CharArray(). Я только начал изучать java как 2 weeeks назад, и мне все еще интересно, как вы, ребята, можете найти правильные коды. благодаря! – WannaCSharp

+0

неважно, что я неправильно прочитал – dcow

+0

@DavidCowden: i и j являются локальными для цикла и в рамках цикла, поэтому как бы вы пришли к выводу, является ли продукт палиндром или нет? –

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