Tergantung. Apakah kita berbicara tentang operasi logis dari perkalian, atau bagaimana itu sebenarnya dilakukan dalam perangkat keras?
Misalnya, Anda dapat mengubah string heksadesimal (atau oktal, atau basis dua pengganda lainnya) menjadi bilangan bulat "tanpa perkalian". Anda dapat menggunakan karakter demi karakter dan tetap menggunakan oring ( |
) dan bitshifting ( <<
). Ini menghindari penggunaan *
operator.
Melakukan hal yang sama dengan string desimal lebih sulit, tetapi kami masih memiliki penambahan sederhana. Anda dapat menggunakan loop dengan tambahan untuk melakukan hal yang sama. Cukup sederhana untuk dilakukan. Atau Anda bisa membuat "tabel perkalian" sendiri - semoga Anda belajar cara melipatgandakan angka di sekolah; Anda dapat melakukan hal yang sama dengan komputer. Dan tentu saja, jika Anda menggunakan komputer desimal (bukan biner), Anda dapat melakukan "bitshift", seperti halnya dengan string heksadesimal sebelumnya. Bahkan dengan komputer biner, Anda dapat menggunakan serangkaian bitshift - (a << 1) + (a << 3)
sama seperti a * 2 + a * 8 == a * 10
. Hati-hati dengan angka negatif. Anda dapat menemukan banyak trik untuk membuat ini menarik.
Tentu saja, keduanya hanyalah perkalian yang tersamar. Itu karena sistem numerik posisional bersifat multiplikasi . Begitulah cara kerja representasi numerik tertentu. Anda dapat memiliki penyederhanaan yang menyembunyikan fakta ini (mis. Angka biner hanya perlu 0
dan 1
, jadi alih-alih mengalikannya, Anda dapat memiliki kondisi yang sederhana - tentu saja, apa yang sebenarnya Anda lakukan adalah perkalian, hanya dengan hanya dua input yang mungkin dan dua kemungkinan) output), tapi selalu ada di sana, mengintai. <<
sama dengan * 2
, bahkan jika perangkat keras yang melakukan operasi dapat lebih sederhana dan / atau lebih cepat.
Untuk menghilangkan perkalian sepenuhnya, Anda harus menghindari penggunaan sistem posisi. Misalnya, angka romawi adalah aditif (catatan bahwa angka romawi yang sebenarnya tidak menggunakan aturan kompaktifikasi kita miliki saat ini - empat akan IIII
, tidak IV
, dan itu empat belas dapat ditulis dalam bentuk apapun seperti XIIII
, IIIIX
, IIXII
, VVIIII
dll). Mengubah string menjadi integer menjadi sangat mudah - cukup ikuti karakter demi karakter, dan terus tambahkan. Jika karakternya adalah X
, tambahkan sepuluh. Jika V
, tambahkan lima. JikaI
, tambahkan satu. Saya harap Anda bisa melihat mengapa angka romawi tetap populer untuk waktu yang lama; sistem numerik posisi sangat bagus ketika Anda perlu melakukan banyak perkalian dan pembagian. Jika Anda terutama berurusan dengan penjumlahan dan pengurangan, angka romawi berfungsi dengan baik, dan membutuhkan lebih sedikit pendidikan (dan sempoa jauh lebih mudah dibuat dan digunakan daripada kalkulator posisional!).
Dengan tugas seperti ini, ada banyak untung-untungan tentang apa yang sebenarnya diinginkan pewawancara. Mungkin mereka hanya ingin melihat proses pemikiran Anda. Apakah Anda merangkul masalah teknis ( <<
tidak benar - benar multiplikasi)? Apakah Anda tahu teori angka dan ilmu komputer? Apakah Anda hanya terjun dengan kode Anda, atau meminta klarifikasi? Apakah Anda melihatnya sebagai tantangan yang menyenangkan, atau pertanyaan wawancara yang membosankan dan konyol yang tidak memiliki relevansi dengan pekerjaan Anda? Tidak mungkin bagi kami untuk memberi tahu Anda jawaban yang dicari pewawancara.
Tapi saya harap saya setidaknya memberi Anda sekilas kemungkinan jawaban :)