Всем доброго времени суток!
Встретил задачу, уже второй день ломаю голову над ошибкой в коде...
Дано целое число (0<число<10^1000000), нужно найти целое число > данного, которое является палиндромом.
Буду рад идее решения, а еще больше рад крутым тестам.
Буду очень благодарен за помощь!
UPD Минимальное целое число.
11111111111111111111111111111111111 всегда подходит
Не всегда, контрпример: 111111111111111111111111111111111111111111111111111111
Кажется O(nlog(n)) не заходит да?
n=len(число)? Если да, то заходит.
тут вроде за O(n) можно. Если автор скинет где можно потестить, то скажу точно
Эта задача была на окружном этапе 2013 года в Москве. Её решение очень простое:
1) Отражаем левую половину числа (Если было число 432562, то получается 432234)
2) Сравниваем с введенным, если полученное отражением число меньше или равно введенному, его надо увеличить.
3) Увеличиваем следующим образом — надо к левой половине прибавить 1 и еще раз отразить. Например если наше отраженное число равно 1234321, то его левая половина 1234, получаем 1235, отражаем 1235321. Для четный длины тоже самое 123321, левая половина 123, получаем 124, отражаем 124421. Если было что-то вида 12921, получаем 13031 (129 + 1 = 130)
4) Но это не все решение задачи, есть мерзкий случай, одни 9. Например 999, но из таких чисел очень очевидно как получать следующий палиндром.
Удачи в написании!
http://paste.ubuntu.com/12907459/
Ставьте +ПЛЮС+, добавляйте в друзья, следити за моим блогом
Попробуй через стринг. Здесь тип как длинная арифметика.