Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   помогите плиз (https://javascript.ru/forum/misc/65401-pomogite-pliz.html)

johnsnow 16.10.2016 22:37

помогите плиз
 
Дано натуральное число. Выяснить, является ли оно палиндромом («перевертышем»), т. е. числом, десятичная запись которого читается одинаково слева направо и справа налево.Нужно преобразовать этот код не используя строки и методы типо Math.floor,max,min

Vlasenko Fedor 16.10.2016 23:02

function palindrome(num) {
    var tmp = num, res = 0, dig;
    while (tmp) {
        dig = tmp % 10;
        res = res * 10 + dig;
        tmp = (tmp - dig) / 10;
    }
    return res == num;
}
alert(palindrome(123321));
:lol:

laimas 17.10.2016 06:09

Цитата:

Сообщение от 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, прерываем цикл и возвращаем результат.

рони 17.10.2016 08:21

:)
функция проверки являетсяли число палиндромом из
первый палиндром в диапазоне min <= num, num <=max

function foo(a) {
    a += "";
    for (var b = 0; b < a.length / 2; b++)
        if (a.substr(b, 1) != a.substr(-(b + 1), 1)) return false;
    return true
};
alert("1 -> "+ foo(1));
alert("151 -> "+ foo(151));
alert("12300 -> "+ foo(12300));
alert("12375 -> "+ foo(12375));
alert("12975 -> "+ foo(12975));

Vlasenko Fedor 17.10.2016 10:47

Не должно быть преоразований в строку
http://www.cyberforum.ru/javascript/thread1827102.html

laimas 17.10.2016 11:04

Цитата:

Сообщение от Poznakomlus
Не должно быть преоразований в строку

Я думал, чего-то такого простого надо, чтобы "у доски" ответить можно было. Тогда вообще не понятно чего хотят или просто пластинку заело? :)


Часовой пояс GMT +3, время: 04:09.