UniLecs #129. Побитовая арифметика

UniLecs #129. Побитовая арифметика

UniLecs

Задача: даны два числа K, N. Необходимо вычислить арифметическое выражение вида: 

K * 2^N, используя только битовые операции.

Входные данные: K, N - натуральные числа, где K от 1 до 10^3, N от 1 до 20

Вывод: результат выражения K * 2^N

Пример: K = 3, N = 4

Answer: 48

Идея: воспользуемся операцией побитового сдвига влево (<<):

переменная << число бит

Побитовый сдвиг влево сдвигает влево значения битов переменной на кол-во, указанное в переменной "число бит".

Отличительной особенностью сдвига влево на N позиций является то, что по сути это эквивалентно нахождению степени N числа 2.

1 << 0 = 1

1 << 1 = 2

1 << 2 = 4

1 << 3 = 8

...

1 << 8 = 256

1 << 9 = 512

1 << 10 = 1024

Соот-но операцию вида K * 2^N можно представить в виде: (K*1) << N = K << N.

Использование операции побитового сдвига влево намного эффективнее встроенных функций ЯП для возведения в степень, например Math.Pow(K, N) в C#.

Реализация:

C#

https://gist.github.com/unilecs/28011b6269381699995e690901d0ad25

Test:

https://dotnetfiddle.net/nPgETm

Report Page