Показать сообщение отдельно
  #3 (permalink)  
Старый 17.10.2016, 06:09
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Сообщение от johnsnow
Нужно преобразовать этот код не используя строки и методы типо Math.floor,max,min
Почему ранее предложенное не подходит, задание?

Никаких max и min и не требуется. Вот так можно проверить на палиндром не только число, но и слово, предложение.

function palindrome(s) {
    var res = true;
    s = s.toString().toLowerCase().replace(/\s/g,'');
        
    for(var i=0, j=parseInt(s.length/2), k=s.length-1; i<j; i++, k--) {
        if(s.charAt(i) != s.charAt(k)) {
            res = false;
            break;
        }        
    }
    
    return res;
}
alert('Число 123454321 ' + (palindrome(123454321) ? '' : ' не') + ' является палиндромом');
alert('Число 123456789 ' + (palindrome(123456789) ? '' : ' не') + ' является палиндромом');
alert('Строка "Аргентина манит негра" ' + (palindrome('Аргентина манит негра') ? '' : ' не') + ' является палиндромом');
alert('Строка "Аргентина ждет негра" ' + (palindrome('Аргентина ждет негра') ? '' : ' не') + ' является палиндромом');


Что сложного то - преобразуем значение в строку, удалим из нее пробелы. Длину входного значения делим пополам, отбрасывая десятичный результат (при нечетном числе знаков в строке средний одиночный символ будет равен сам себе), получая число итераций цикла. Далее в цикле с полученной итерацией проверяем крайние символы строки и если значения не равны, то признак палиндрома устанавливаем равный false, прерываем цикл и возвращаем результат.
Ответить с цитированием