Ça dépend. Parlons-nous de l'opération logique de la multiplication, ou comment cela se fait-il réellement dans le matériel?
Par exemple, vous pouvez convertir une chaîne hexadécimale (ou octale, ou tout autre multiplicateur de base deux) en un entier "sans multiplication". Vous pouvez parcourir caractère par caractère et conserver oring ( |
) et bitshifting ( <<
). Cela évite d'utiliser l' *
opérateur.
Faire de même avec des chaînes décimales est plus délicat, mais nous avons encore un ajout simple. Vous pouvez utiliser des boucles avec ajout pour faire la même chose. Assez simple à faire. Ou vous pouvez créer votre propre "table de multiplication" - j'espère que vous avez appris à multiplier les nombres à l'école; vous pouvez faire la même chose avec un ordinateur. Et bien sûr, si vous êtes sur un ordinateur décimal (plutôt que binaire), vous pouvez faire le "décalage de bits", tout comme avec la chaîne hexadécimale précédente. Même avec un ordinateur binaire, vous pouvez utiliser une série de décalages de bits - (a << 1) + (a << 3)
c'est la même chose que a * 2 + a * 8 == a * 10
. Attention aux nombres négatifs. Vous pouvez trouver de nombreuses astuces pour rendre cela intéressant.
Bien sûr, les deux ne sont que des multiplications déguisées. En effet, les systèmes numériques de position sont intrinsèquement multiplicatifs . Voilà comment fonctionne cette représentation numérique particulière. Vous pouvez avoir des simplifications qui cachent ce fait (par exemple, les nombres binaires n'ont besoin 0
que 1
, et donc au lieu de multiplier, vous pouvez avoir une condition simple - bien sûr, ce que vous faites vraiment est toujours la multiplication, juste avec seulement deux entrées possibles et deux possibles sorties), mais il est toujours là, tapi. <<
est identique à * 2
, même si le matériel qui effectue l'opération peut être plus simple et / ou plus rapide.
Pour supprimer complètement la multiplication, vous devez éviter d'utiliser un système positionnel. Par exemple, les chiffres romains sont additives (notez que les chiffres romains réels ne pas utiliser les règles de compactification que nous avons aujourd'hui - quatre serait IIII
pas IV
, et quatorze ont pu être écrites sous une forme quelconque comme XIIII
, IIIIX
, IIXII
, VVIIII
etc.). Convertir une telle chaîne en entier devient très facile - il suffit de passer caractère par caractère et de continuer à ajouter. Si le personnage est X
, ajoutez-en dix. Si V
, ajoutez cinq. SiI
, ajoute un. J'espère que vous pouvez voir pourquoi les chiffres romains sont restés si populaires pendant si longtemps; les systèmes numériques de position sont merveilleux lorsque vous devez faire beaucoup de multiplication et de division. Si vous avez principalement affaire à l'addition et à la soustraction, les chiffres romains fonctionnent très bien et nécessitent beaucoup moins de scolarité (et un boulier est beaucoup plus facile à fabriquer et à utiliser qu'une calculatrice de position!).
Avec des missions comme celle-ci, il y a beaucoup de aléas sur ce que l'intervieweur attend réellement. Peut-être qu'ils veulent juste voir vos processus de pensée. Adoptez-vous des détails techniques (ce <<
n'est pas vraiment de la multiplication)? Connaissez-vous la théorie des nombres et l'informatique? Plongez-vous simplement dans votre code ou demandez-vous des éclaircissements? Le voyez-vous comme un défi amusant ou comme une autre question d'entrevue ennuyeuse et ridicule qui n'a aucune pertinence par rapport à votre travail? Il nous est impossible de vous dire la réponse que l'intervieweur cherchait.
Mais j'espère qu'au moins je vous ai donné un aperçu des réponses possibles :)