Değişir. Çarpmanın mantıksal işleminden mi, yoksa aslında donanımda nasıl yapıldığından mı bahsediyoruz?
Örneğin, bir onaltılık (veya sekizli veya herhangi bir diğer temel iki çarpan) dizesini "çarpma olmadan" tamsayısına dönüştürebilirsiniz. Karakteri karaktere göre gidebilir ve oring ( |
) ve bitshifting ( <<
) yöntemlerini kullanabilirsiniz. Bu *
operatörü kullanmaktan kaçınır .
Ondalık dizelerle aynısını yapmak daha zordur, ancak yine de basit bir eklentimiz var. Aynı şeyi yapmak için döngüler ek olarak kullanabilirsiniz. Yapması oldukça basit. Ya da kendi "çarpım tablonuzu" yapabilirsiniz - umarım okulda sayıları çarpmayı öğrendiniz; aynı şeyi bir bilgisayarla da yapabilirsiniz. Ve elbette, ondalık bir bilgisayardaysanız (ikili yerine), tıpkı önceki onaltılık dizgede olduğu gibi "bitshift" i yapabilirsiniz. İkili bir bilgisayarla bile, bir dizi bitshift kullanabilirsiniz - (a << 1) + (a << 3)
aynıdır a * 2 + a * 8 == a * 10
. Negatif sayılar konusunda dikkatli olun. Bunu ilginç kılmak için birçok püf noktası bulabilirsin.
Tabii ki, her ikisi de sadece kılık değiştirerek çarpmadır. Çünkü konumsal sayısal sistemler doğası gereği çarpıcıdır . Bu belirli sayısal temsil böyle çalışır. Bu gerçeği gizleyen basitleştirmelere sahip olabilirsiniz (örneğin, ikili sayılar sadece ihtiyaç duyar 0
ve 1
bu nedenle çarpmak yerine basit bir koşula sahip olabilirsiniz - elbette, gerçekte yaptığınız şey sadece çarpışma, sadece iki olası giriş ve iki olası çıktılar), ama her zaman orada, gizleniyor. işlemi yapan donanım daha basit ve / veya daha hızlı olsa bile <<
aynıdır * 2
.
Çarpmayı tamamen ortadan kaldırmak için konumsal bir sistem kullanmaktan kaçınmanız gerekir. Örneğin, romen rakamları katkı (- dört olacağını fiili romen rakamları bugün var kompaktikasyon kurallarını kullanabilirsiniz etmediğini not vardır IIII
, değil IV
ve o on dört gibi herhangi bir biçimde yazılmış olabilir XIIII
, IIIIX
, IIXII
, VVIIII
vb.) Böyle bir dizeyi tamsayıya dönüştürmek çok kolay hale gelir - sadece karakter karakter gidin ve eklemeye devam edin. Karakter ise X
, on ekleyin. Eğer V
beş tane ekleyin. EğerI
, ekleyin. Umarım Romen rakamlarının neden bu kadar uzun süre popüler kaldığını görebilirsiniz; çok sayıda çarpma ve bölme yapmanız gerektiğinde konumsal sayısal sistemler harikadır. Esas olarak toplama ve çıkarma ile uğraşıyorsanız, romen rakamları harika çalışır ve çok daha az okul gerektirir (ve bir abaküs yapmak ve konum hesaplayıcıdan çok daha kolaydır!).
Bunun gibi ödevlerle, görüşmecinin gerçekte ne beklediği konusunda çok fazla hit ve özledim. Belki de sadece düşünce süreçlerinizi görmek isterler. Teknikleri kucaklıyor musunuz ( gerçekten çarpma <<
değil )? Sayı teorisi ve bilgisayar bilimi biliyor musunuz? Sadece kodunuzla devam mı ediyorsunuz yoksa açıklama mı istiyorsunuz? Bunu eğlenceli bir meydan okuma olarak mı, yoksa işinizle hiçbir ilgisi olmayan başka bir saçma sıkıcı röportaj sorusu olarak mı görüyorsunuz? Size görüşmecinin aradığı cevabı söylememiz imkansız.
Ama umarım en azından sana olası cevaplara bir göz atacağım :)