Depende. Estamos falando da operação lógica da multiplicação ou de como ela é realmente feita no hardware?
Por exemplo, você pode converter uma sequência hexadecimal (ou octal ou qualquer outro multiplicador de base dois) em um número inteiro "sem multiplicação". Você pode caracterizar caractere e manter oring ( |
) e bitshifting ( <<
). Isso evita o uso do *
operador.
Fazer o mesmo com seqüências decimais é mais complicado, mas ainda temos uma adição simples. Você pode usar loops com adição para fazer a mesma coisa. Muito simples de fazer. Ou você pode criar sua própria "tabuada de multiplicação" - espero que tenha aprendido a multiplicar números na escola; você pode fazer a mesma coisa com um computador. E, é claro, se você estiver em um computador decimal (em vez de binário), poderá executar o "deslocamento de bits", como na string hexadecimal anterior. Mesmo com um computador binário, você pode usar uma série de turnos de bits - (a << 1) + (a << 3)
é o mesmo que a * 2 + a * 8 == a * 10
. Cuidado com números negativos. Você pode descobrir muitos truques para tornar isso interessante.
Obviamente, ambos são apenas multiplicação disfarçada. Isso ocorre porque os sistemas numéricos posicionais são inerentemente multiplicativos . É assim que essa representação numérica específica funciona. Você pode ter simplificações que ocultam esse fato (por exemplo, os números binários precisam apenas 0
e 1
, em vez de se multiplicar, você pode ter uma condição simples - é claro, o que você realmente está fazendo ainda é a multiplicação, apenas com apenas duas entradas possíveis e duas possíveis. saídas), mas está sempre lá, à espreita. <<
é o mesmo que * 2
, mesmo que o hardware que executa a operação possa ser mais simples e / ou mais rápido.
Para eliminar completamente a multiplicação, você precisa evitar o uso de um sistema posicional. Por exemplo, numerais romanos são aditivos (note que algarismos romanos reais não usar as regras compactification que temos hoje - quatro seria IIII
, não IV
, e quatorze poderia ser escrito em qualquer forma, como XIIII
, IIIIX
, IIXII
, VVIIII
etc.). A conversão dessa string em número inteiro torna-se muito fácil - basta caractere por caractere e continue adicionando. Se o personagem for X
, adicione dez. Se V
adicionar cinco. E seI
, Adicione um. Espero que você possa ver por que os algarismos romanos permaneceram populares por tanto tempo; sistemas numéricos posicionais são maravilhosos quando você precisa fazer muita multiplicação e divisão. Se você lida principalmente com adição e subtração, os algarismos romanos funcionam muito bem e exigem muito menos escolaridade (e um ábaco é muito mais fácil de criar e usar do que uma calculadora posicional!).
Em tarefas como essa, há muita coisa sobre o que o entrevistador realmente espera. Talvez eles só querem ver seus processos de pensamento. Você adota tecnicismos ( <<
não é realmente multiplicação)? Você conhece teoria dos números e ciência da computação? Você apenas mergulha no seu código ou pede esclarecimentos? Você vê isso como um desafio divertido ou como mais uma pergunta de entrevista ridícula e chata que não tem nenhuma relevância para qual é o seu trabalho? É impossível dizer a resposta que o entrevistador estava procurando.
Mas espero ter, pelo menos, um vislumbre de possíveis respostas :)