Es hängt davon ab, ob. Sprechen wir über die logische Operation der Multiplikation oder wie es tatsächlich in der Hardware gemacht wird?
Beispielsweise können Sie eine hexadezimale (oder oktale oder eine andere Basis-Zwei-Multiplikator-Zeichenfolge) in eine Ganzzahl "ohne Multiplikation" konvertieren. Sie können Zeichen für Zeichen gehen und oring ( |
) und bitshifting ( <<
) beibehalten . Dies vermeidet die Verwendung des *
Operators.
Dasselbe mit Dezimalzeichenfolgen zu tun ist schwieriger, aber wir haben immer noch eine einfache Addition. Sie können zusätzlich Schleifen verwenden, um dasselbe zu tun. Ziemlich einfach zu machen. Oder Sie können Ihre eigene "Multiplikationstabelle" erstellen - hoffentlich haben Sie in der Schule gelernt, wie man Zahlen multipliziert; Sie können dasselbe mit einem Computer tun. Und natürlich können Sie, wenn Sie sich auf einem Dezimalcomputer befinden (und nicht auf einem Binärcomputer), die "Bitverschiebung" ausführen, genau wie bei der früheren hexadezimalen Zeichenfolge. Selbst mit einem Binärcomputer können Sie eine Reihe von Bitverschiebungen verwenden - (a << 1) + (a << 3)
das gleiche wie a * 2 + a * 8 == a * 10
. Vorsicht bei negativen Zahlen. Sie können viele Tricks herausfinden, um dies interessant zu machen.
Natürlich sind beide nur Multiplikation in Verkleidung. Das liegt daran, dass positionelle numerische Systeme von Natur aus multiplikativ sind . So funktioniert diese spezielle numerische Darstellung. Sie können Vereinfachungen haben, die diese Tatsache verbergen (z. B. müssen nur Binärzahlen verwendet werden, 0
und 1
anstatt zu multiplizieren, können Sie eine einfache Bedingung haben - natürlich ist das, was Sie wirklich tun, immer noch Multiplikation, nur mit nur zwei möglichen Eingaben und zwei möglichen Ausgänge), aber es ist immer da und lauert. <<
ist das gleiche wie * 2
, selbst wenn die Hardware, die den Vorgang ausführt, einfacher und / oder schneller sein kann.
Um die Multiplikation vollständig zu beseitigen, müssen Sie die Verwendung eines Positionssystems vermeiden. Zum Beispiel sind römische Ziffern Additiv (beachten Sie, dass tatsächliche römische Ziffern nicht die kompaktere Regeln verwendet haben wir heute haben - vier wären IIII
, nicht IV
, und es vierzehn könnte wie in irgendeiner Form geschrieben werden XIIII
, IIIIX
, IIXII
, VVIIII
etc.). Das Konvertieren einer solchen Zeichenfolge in eine Ganzzahl wird sehr einfach - gehen Sie einfach Zeichen für Zeichen und fügen Sie weitere hinzu. Wenn das Zeichen ist X
, addieren Sie zehn. Wenn V
, fügen Sie fünf hinzu. WennI
, füge eins hinzu. Ich hoffe, Sie können sehen, warum römische Ziffern so lange beliebt blieben. Positionsnumerische Systeme sind wunderbar, wenn Sie viel multiplizieren und dividieren müssen. Wenn Sie sich hauptsächlich mit Addition und Subtraktion beschäftigen, funktionieren römische Ziffern hervorragend und erfordern viel weniger Schulbildung (und ein Abakus ist viel einfacher herzustellen und zu verwenden als ein Positionsrechner!).
Bei solchen Aufgaben gibt es eine Menge Erfolg und Misserfolg darüber, was der Interviewer tatsächlich erwartet. Vielleicht wollen sie nur Ihre Denkprozesse sehen. Akzeptieren Sie technische Aspekte ( <<
ist nicht wirklich Multiplikation)? Kennen Sie Zahlentheorie und Informatik? Tauchen Sie einfach in Ihren Code ein oder bitten Sie um Klarstellung? Sehen Sie es als eine lustige Herausforderung oder als eine weitere lächerliche, langweilige Interviewfrage, die für Ihren Job keine Relevanz hat? Es ist uns unmöglich, Ihnen die Antwort zu sagen, nach der der Interviewer gesucht hat.
Aber ich hoffe ich habe dir wenigstens einen Einblick in mögliche Antworten gegeben :)