Проблема перевернутых битов

В этой задаче решателю предлагается вывести перевернутые биты 32-битного беззнакового целого числа.

В деталях, вам будет предоставлено целое число —

9 (основание 10)

Вы должны написать функцию, которая возвращает результат 32-битного беззнакового десятичного целого числа —

4294967286 (основание 10)

Весь код будет на Javascript, но вы можете использовать любой язык для решения этой задачи.

Как перейти от 9 к 4294967286?

  • сначала возьмите входные данные и преобразуйте их в строку с помощью функции toString().
 let s=n.toString(2);
войти в полноэкранный режим выйти из полноэкранного режима
  • инициализируйте новую переменную и присвойте ей значение 32-(длина строки)
 let temp=32-s.length;
Войдите в полноэкранный режим Выход из полноэкранного режима

Почему temp равно 32-s.length — переменная s хранит число в двоичном формате, т.е. n=9 в десятичной системе счисления и s будет хранить «1001» в двоичном формате {datatype of s is string here}, в данном случае вас просят сгенерировать 32-битное целое число, поэтому, чтобы сложить оставшиеся биты в s, мы присваиваем temp по заданной формуле.

  • инициализировать новую переменную и присвоить ей пустую строку
let temp_s="";
for(let i=0;i<temp;i++)
    temp_s+="0";
Войти в полноэкранный режим Выйти из полноэкранного режима

temp_s добавляет 0 к пустой строке длины temp.

  • res_s будет содержать строку, заполненную 0, и преобразованную строку числа в двоичном формате
let res_s=temp_s+s; 
Вход в полноэкранный режим Выход из полноэкранного режима

res_s=00000000000000000000000000001001

  • flip_s будет хранить перевернутую строку, так как 1 будет преобразована в 0, а 0 в 1
let flip_s="";
Войти в полноэкранный режим Выход из полноэкранного режима
  • мы используем цикл for для перехода по строке res_s
for(let i of res_s) {
        if(i==="0")
            flip_s+="1";
        else if(i==="1")
            flip_s+="0";
    }
Войти в полноэкранный режим Выход из полноэкранного режима

Здесь каждый элемент строки проверяется на 0 и 1 и присваивается 1 и 0 соответственно.

flip_s=11111111111111111111111111110110

  • вывести значение заданного выражения на консоль/экран вызова
console.log( parseInt(flip_s, 2));
Войти в полноэкранный режим Выйти из полноэкранного режима

Здесь метод parseInt() преобразует переменную flip_s в десятичную форму и выводит результат в виде

4294967286

Эта задача входит в комплект HackerRank’s 1 Month Interview Prep Kit.

Оцените статью
devanswers.ru
Добавить комментарий