@string001

Задача JS на английском?

Помогите понять смысл этой задачки! Английский более менее, но все равно не смог понять смысл)

The number n is Evil if it has an even number of 1's in its binary expansion.
First ten: 3, 5, 6, 9, 10, 12, 15, 17, 18, 20

The number n is Odious if it has an odd number of 1's in its binary expansion.
First ten: 1, 2, 4, 7, 8, 11, 13, 14, 16, 19

You have to write a function that determine if a number is Evil of Odious, function should return "It's Evil!" in case of evil number and "It's Odious!" in case of odious number.

good luck :)

Test.assertEquals(evil(1),"It's Odious!");
Test.assertEquals(evil(2),"It's Odious!");
Test.assertEquals(evil(3),"It's Evil!");
  • Вопрос задан
  • 252 просмотра
Решения вопроса 2
Необходимо посчитать количество "1" в двоичной записи числа.
Четное - Evil
Нечетное - Odious
Ответ написан
Комментировать
bingo347
@bingo347 Куратор тега JavaScript
Crazy on performance...
Если нужно решение:

Простой вариант, на строках
function evil(num) {
    return num.toString(2).replace(/0/g, '').length % 2 ? "It's Odious!" : "It's Evil!";
}


Правильный вариант, на бинарной алгебре
function evil(num) {
    var result = 0;
    var n = num;
    while(n > 0) {
        result += n & 1;
        n >>= 1;
    }
    return result % 2 ? "It's Odious!" : "It's Evil!";
}


Строковый вариант будет работать в js для чисел не выше 2 ** 52, бинарный не выше 2 ** 31
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы