มันขึ้นอยู่กับ. เรากำลังพูดถึงการดำเนินการเชิงตรรกะของการคูณหรือวิธีการทำในฮาร์ดแวร์จริง ๆ ?
ตัวอย่างเช่นคุณสามารถแปลงสตริงเลขฐานสิบหก (หรือฐานแปดหรือตัวคูณฐานสองตัวอื่น) เป็นจำนวนเต็ม "โดยไม่ต้องคูณ" คุณสามารถไปตัวละครโดยตัวละครและให้ oring ( |
) และ bitshifting ( <<
) วิธีนี้หลีกเลี่ยงการใช้*
โอเปอเรเตอร์
การทำเช่นเดียวกันกับสตริงทศนิยมนั้นยากกว่า แต่เราก็ยังมีวิธีง่าย ๆ คุณสามารถใช้ลูปได้นอกจากนี้เพื่อทำสิ่งเดียวกัน สวยง่ายน่าสนใจ หรือคุณสามารถสร้าง "ตารางสูตรคูณ" ของคุณเอง - หวังว่าคุณจะได้เรียนรู้วิธีการคูณตัวเลขในโรงเรียน คุณสามารถทำสิ่งเดียวกันกับคอมพิวเตอร์ และแน่นอนถ้าคุณใช้คอมพิวเตอร์ทศนิยม (แทนที่จะเป็นไบนารี่) คุณสามารถทำ "bitshift" ได้เหมือนกับสตริงเลขฐานสิบหกที่ก่อนหน้านี้ ถึงแม้จะมีเครื่องคอมพิวเตอร์ไบนารีคุณสามารถใช้ชุดของ bitshifts - การเป็นเช่นเดียวกับ(a << 1) + (a << 3)
a * 2 + a * 8 == a * 10
ระมัดระวังเกี่ยวกับตัวเลขลบ คุณสามารถหาเทคนิคมากมายเพื่อทำให้สิ่งนี้น่าสนใจ
แน่นอนว่าทั้งสองอย่างนี้เป็นเพียงการเพิ่มการปลอมตัว นั่นเป็นเพราะระบบตัวเลขตำแหน่งที่มีการคูณโดยเนื้อแท้ นั่นเป็นวิธีที่การแสดงตัวเลขโดยเฉพาะนั้นทำงานได้ คุณสามารถมีการทำให้เข้าใจง่ายที่ซ่อนความจริงนี้ (เช่นต้องการเลขฐานสองเท่านั้น0
และ1
ดังนั้นแทนที่จะมีการคูณคุณสามารถมีเงื่อนไขง่ายๆ - แน่นอนสิ่งที่คุณกำลังทำจริง ๆ ยังคงเป็นการคูณเพียงแค่อินพุตที่เป็นไปได้สองอันเท่านั้น เอาท์พุท) แต่มันอยู่ที่นั่นเสมอที่ซุ่มซ่อน <<
เหมือนกับ* 2
แม้ว่าฮาร์ดแวร์ที่ใช้ในการดำเนินการจะง่ายขึ้นและ / หรือเร็วขึ้น
หากต้องการกำจัดการคูณทั้งหมดคุณต้องหลีกเลี่ยงการใช้ระบบตำแหน่ง ยกตัวอย่างเช่นเลขโรมันเป็นสารเติมแต่ง (ทราบว่าเลขโรมันที่เกิดขึ้นจริงไม่ได้ใช้กฎ compactification ที่เรามีวันนี้ - สี่จะIIII
ไม่ได้IV
และมันสิบสี่อาจจะเขียนในรูปแบบใด ๆ เช่นXIIII
, IIIIX
, IIXII
, VVIIII
ฯลฯ ) การแปลงสตริงเป็นจำนวนเต็มกลายเป็นเรื่องง่ายมากเพียงไปที่ตัวอักษรต่ออักขระและเพิ่มต่อไป ถ้าตัวละครเป็นX
เพิ่มสิบ ถ้าV
เพิ่มอีกห้า ถ้าI
เพิ่มหนึ่งรายการ ฉันหวังว่าคุณจะเห็นว่าทำไมตัวเลขโรมันยังคงเป็นที่นิยมมานาน ระบบตัวเลขตำแหน่งยอดเยี่ยมเมื่อคุณต้องการคูณและหารจำนวนมาก หากคุณต้องการจัดการกับการบวกและการลบตัวเลขโรมันนั้นใช้งานได้ดีและต้องการการศึกษาน้อยกว่ามาก (และลูกคิดนั้นง่ายกว่ามากในการสร้างและใช้งานมากกว่าเครื่องคิดเลขตำแหน่ง!)
ด้วยการมอบหมายเช่นนี้มีจำนวนมากและพลาดเกี่ยวกับสิ่งที่ผู้สัมภาษณ์คาดหวังจริง บางทีพวกเขาอาจต้องการเห็นกระบวนการคิดของคุณ คุณโอบกอด technicalities ( <<
ไม่ได้คูณจริงๆ )? คุณรู้ทฤษฎีจำนวนและวิทยาการคอมพิวเตอร์หรือไม่ คุณเพียงแค่กระโดดด้วยรหัสของคุณหรือขอคำชี้แจง? คุณเห็นว่ามันเป็นความท้าทายที่สนุกหรือเป็นคำถามสัมภาษณ์ที่น่าเบื่อที่ไร้สาระอื่น ๆ ที่ไม่เกี่ยวข้องกับงานของคุณหรือไม่? เป็นไปไม่ได้ที่เราจะบอกคำตอบที่ผู้สัมภาษณ์กำลังมองหา
แต่ฉันหวังว่าอย่างน้อยฉันก็ให้คำตอบที่เป็นไปได้ :)