Это зависит. Мы говорим о логической операции умножения, или как это на самом деле делается в аппаратном обеспечении?
Например, вы можете преобразовать шестнадцатеричную (или восьмеричную, или любой другой базовый множитель два) в целое число «без умножения». Вы можете идти символ за символом и продолжать oring ( |
) и bithifting ( <<
). Это позволяет избежать использования *
оператора.
Делать то же самое с десятичными строками сложнее, но у нас все еще есть простое сложение. Вы можете использовать циклы с дополнением, чтобы сделать то же самое. Довольно просто сделать. Или вы можете создать свою собственную «таблицу умножения» - надеюсь, вы научились умножать числа в школе; Вы можете сделать то же самое с компьютером. И, конечно же, если вы работаете на десятичном компьютере (а не на двоичном), вы можете выполнить «битовое смещение», как и в предыдущей шестнадцатеричной строке. Даже с двоичным компьютером вы можете использовать серию битовых сдвигов - (a << 1) + (a << 3)
это то же самое, что и a * 2 + a * 8 == a * 10
. Осторожнее с отрицательными числами. Вы можете найти множество хитростей, чтобы сделать это интересным.
Конечно, оба они являются замаскированным умножением. Это потому, что позиционные числовые системы по своей сути мультипликативны . Вот как работает это конкретное числовое представление. У вас могут быть упрощения, которые скрывают этот факт (например, нужны только двоичные числа 0
и 1
, таким образом, вместо умножения вы можете иметь простое условие - конечно, то, что вы действительно делаете, это все еще умножение, только с двумя возможными входами и двумя возможными выходы), но она всегда есть, таится. <<
то же самое * 2
, даже если аппаратное обеспечение, которое выполняет операцию, может быть проще и / или быстрее.
Чтобы полностью отказаться от умножения, вам нужно избегать использования позиционной системы. Например, римские цифры являются аддитивными (обратите внимание , что фактические римские цифры не использовать правила компактификации мы имеем сегодня - четыре бы IIII
, не IV
, и четырнадцать могли быть написаны в любой форме , как XIIII
, IIIIX
, IIXII
, и VVIIII
т.д.). Преобразование такой строки в целое число становится очень простым - просто переходите от символа к символу и продолжайте добавлять. Если персонаж есть X
, добавьте десять. Если V
добавить пять. ЕслиI
, добавить одну. Я надеюсь, вы понимаете, почему римские цифры так долго оставались популярными; позиционные числовые системы прекрасны, когда вам нужно много умножения и деления. Если вы в основном имеете дело с сложением и вычитанием, римские цифры работают отлично и требуют гораздо меньшего обучения (а счеты гораздо проще в создании и использовании, чем позиционный калькулятор!).
С подобными заданиями можно многое узнать о том, чего на самом деле ожидает интервьюер. Может быть, они просто хотят увидеть ваши мыслительные процессы. Вы <<
принимаете технические аспекты (на самом деле это не умножение)? Знаете ли вы теорию чисел и информатику? Вы просто погружаетесь в свой код или просите разъяснений? Считаете ли вы это забавным испытанием или еще одним смешным скучным вопросом для собеседования, который не имеет никакого отношения к вашей работе? Мы не можем сказать вам ответ, который искал интервьюер.
Но я надеюсь, что я хотя бы дал вам представление о возможных ответах :)