Це залежить. Ми говоримо про логічну операцію множення чи про те, як це відбувається насправді в апаратному забезпеченні?
Наприклад, ви можете перетворити шістнадцятковий (або восьмий або будь-який інший базовий два множник) рядок у ціле число "без множення". Ви можете набирати символів за символом і зберігати oring ( |
) та bitshifting ( <<
). Це уникає використання *
оператора.
Зробити те саме з десятковими рядками складніше, але ми все ще маємо просте доповнення. Ви можете використовувати петлі з додаванням, щоб зробити те саме. Дуже просто зробити. Або ви можете скласти власну «таблицю множення» - сподіваємось, ви навчилися множувати числа в школі; те ж саме можна зробити і з комп’ютером. І звичайно, якщо ви перебуваєте на десятковому комп’ютері (а не двійковому), ви можете робити "бітшвидкіс", як і в попередньому шістнадцятковому рядку. Навіть з двійковим комп'ютером можна використовувати серію бітзмінів - (a << 1) + (a << 3)
те саме, що a * 2 + a * 8 == a * 10
. Обережно ставляться до від’ємних чисел. Ви можете придумати безліч хитрощів, щоб зробити це цікавим.
Звичайно, і те, і інше - це просто множення в маскуванні. Це тому, що позиційні числові системи за своєю суттю мультиплікативні . Ось так працює саме це числове представлення. Ви можете мати спрощень , які приховують цей факт (наприклад , виконавчі числа потрібно тільки 0
і 1
, таким чином , замість множення, ви можете мати просту умову - звичайно, то , що ви дійсно робите все ще множення, просто тільки два можливих входів і двох можливих виводи), але це завжди є, ховається. <<
те саме * 2
, що навіть якщо обладнання, яке виконує операцію, може бути простішим та / або швидшим.
Щоб повністю уникнути множення, потрібно уникати використання позиційної системи. Наприклад, римські цифри є адитивними (зверніть увагу , що фактичні римські цифри не використовувати правила компактификации ми маємо сьогодні - чотири б IIII
, чи не IV
, і чотирнадцять могли бути написані в будь-якій формі , як XIIII
, IIIIX
, IIXII
, і VVIIII
т.д.). Перетворити такий рядок у ціле число стає дуже просто - просто перейдіть по символу та продовжуйте додавати. Якщо символ є X
, додайте десять. Якщо V
, додайте п'ять. ЯкщоI
, додайте один. Я сподіваюся, ви можете зрозуміти, чому римські цифри залишалися популярними так довго; позиційні числові системи чудові, коли потрібно зробити багато множення та ділення. Якщо ви в основному маєте справу з додаванням і відніманням, римські цифри працюють чудово і вимагають набагато менше навчання (а абак набагато простіше зробити і використовувати, ніж позиційний калькулятор!).
З такими завданнями, як багато цього, дуже багато вражень і того, що насправді очікує інтерв'юер. Можливо, вони просто хочуть бачити ваші думки. Чи сприймаєте ви техніку ( насправді<<
це не множення)? Чи знаєте ви теорію чисел та інформатику? Ви просто занурюєтесь у свій код або просите роз'яснення? Ви вважаєте це цікавим викликом чи ще одним смішним нудним питанням інтерв'ю, яке не має жодного стосунку до вашої роботи? Нам неможливо сказати вам відповідь, яку шукав інтерв'юер.
Але я сподіваюся, що я принаймні дав вам уявлення про можливі відповіді :)