Nó phụ thuộc. Chúng ta đang nói về hoạt động logic của phép nhân, hay nó thực sự được thực hiện như thế nào trong phần cứng?
Ví dụ: bạn có thể chuyển đổi một chuỗi thập lục phân (hoặc bát phân hoặc bất kỳ chuỗi hai số cơ sở nào khác) thành một số nguyên "không nhân". Bạn có thể đi theo từng ký tự và giữ oring ( |
) và bitshifting ( <<
). Điều này tránh sử dụng *
toán tử.
Làm tương tự với các chuỗi thập phân là khó hơn, nhưng chúng ta vẫn có phép cộng đơn giản. Bạn có thể sử dụng các vòng lặp với sự bổ sung để làm điều tương tự. Khá đơn giản để làm. Hoặc bạn có thể tạo "bảng nhân" của riêng mình - hy vọng bạn đã học được cách nhân số trong trường; bạn có thể làm điều tương tự với một máy tính. Và tất nhiên, nếu bạn đang sử dụng máy tính thập phân (chứ không phải nhị phân), bạn có thể thực hiện "bitshift", giống như với chuỗi thập lục phân trước đó. Ngay cả với một máy tính nhị phân, bạn có thể sử dụng một loạt các bithifts - (a << 1) + (a << 3)
cũng giống như a * 2 + a * 8 == a * 10
. Cẩn thận về số âm. Bạn có thể tìm ra nhiều thủ thuật để làm cho điều này thú vị.
Tất nhiên, cả hai điều này chỉ là sự nhân lên trong ngụy trang. Đó là bởi vì các hệ thống số vị trí vốn đã được nhân lên . Đó là cách biểu diễn số cụ thể đó hoạt động. Bạn có thể có các đơn giản hóa để che giấu sự thật này (ví dụ: số nhị phân chỉ cần 0
và 1
vì vậy thay vì nhân, bạn có thể có một điều kiện đơn giản - tất nhiên, những gì bạn thực sự làm vẫn là nhân, chỉ với hai đầu vào có thể và hai có thể đầu ra), nhưng nó luôn ở đó, ẩn nấp. <<
là giống như * 2
, ngay cả khi phần cứng thực hiện thao tác có thể đơn giản hơn và / hoặc nhanh hơn.
Để loại bỏ hoàn toàn phép nhân, bạn cần tránh sử dụng hệ thống định vị. Ví dụ, chữ số La Mã là phụ gia (lưu ý rằng chữ số La Mã thực tế không sử dụng các quy tắc compact hóa chúng ta có ngày hôm nay - Bốn sẽ là IIII
, không IV
, và nó mười bốn tuổi có thể được viết bằng bất kỳ hình thức như XIIII
, IIIIX
, IIXII
, VVIIII
vv). Chuyển đổi một chuỗi như vậy thành số nguyên trở nên rất dễ dàng - chỉ cần đi từng ký tự và tiếp tục thêm. Nếu nhân vật là X
, thêm mười. Nếu V
, thêm năm. NếuI
, cộng một. Tôi hy vọng bạn có thể thấy tại sao chữ số La Mã vẫn phổ biến từ rất lâu; hệ thống số vị trí là tuyệt vời khi bạn cần phải thực hiện nhiều phép nhân và chia. Nếu bạn chủ yếu xử lý phép cộng và phép trừ, chữ số La Mã hoạt động rất tốt và đòi hỏi ít đi học hơn (và bàn tính dễ thực hiện và sử dụng hơn nhiều so với máy tính định vị!).
Với những bài tập như thế này, có rất nhiều điều thú vị và bỏ lỡ về những gì người phỏng vấn thực sự mong đợi. Có lẽ họ chỉ muốn xem quá trình suy nghĩ của bạn. Bạn có nắm bắt được kỹ thuật ( <<
không thực sự nhân lên)? Bạn có biết lý thuyết số và khoa học máy tính? Bạn chỉ cần lao vào với mã của bạn, hoặc yêu cầu làm rõ? Bạn có thấy đó là một thử thách thú vị, hay một câu hỏi phỏng vấn nhàm chán vô lý khác không liên quan đến công việc của bạn là gì không? Chúng tôi không thể nói cho bạn câu trả lời mà người phỏng vấn đang tìm kiếm.
Nhưng tôi hy vọng tôi ít nhất đã cho bạn một cái nhìn thoáng qua về các câu trả lời có thể :)