Pull to refresh

Comments 12

b = (a << 3) - a; // быстрый аналог b=a*7, если нет операции умножения.


Это если строго на 7.
И не забыть проверку на нуль.
Туплю же, и с нулем все корректно работает.
А почему вы в качестве «a» сначала подставляете 0, а потом 3?
Ай, точно )) Сначала с цифрой 3 пробовал и забыл убрать.
Да, был такой вариант, который не пришел (и никогда не придет) в мою голову. Приведу ограничение, которые было в обсуждении этого варианта: только для целых типов.
А на произвольное число делается как сумма сдвигов на позиции где в множителе единички. Например 7 = 111b. Значит нужно сложить число сдвинутое на 2 на 1 и на 0 позиций.
Соответственно на 5 было бы как сумма сдвигов на 2 и на 0.
Интересно, насколько медленнее будет задача про лифт через условные операторы, например:
int worker4(unsigned int n) { return (n == 2)?1:2; }
Sign up to leave a comment.

Articles