Originariamente inviato da b4kk3
devo moltiplicare tra di loro due numeri organizzati ognuno in 6 word da 32 bit...
la moltiplicazione di per se non è difficile, moltiplico il moltiplicando per ogni bit del moltiplicatore shiftando e poi faccio la simma bit a bit ma che tipo di struttura mi conviene utilizzare, per immagzzinare i dati e il risultato? e in che modo?
Domanda: è un "esercizio didattico" per cui ti è stato chiesto esplicitamente di implementare tu un algoritmo appropriato?

Perché per queste cose (calcoli a "precisione arbitraria") esiste la classe java.math.BigInteger che è sicuramente migliore e più efficiente di quanto potresti fare tu.

Se invece devi farlo proprio tu, una soluzione è quella che hai detto, cioè operare sui bit e fare anche degli shift. Ma la vedo più lunga e difficile (specialmente lo shift).
Un'altra soluzione è fare le moltiplicazioni a pezzi di N x N bit. In questa vecchia discussione avevo mostrato lo schema per fare una moltiplicazione 16x16 bit "sapendo" fare solo moltiplicazioni 8x8 bit. Nella discussione si parlava espressamente di linguaggio Assembly ma il concetto comunque è quello e non cambia.

Il mio suggerimento è di tenere il tuo "big number" memorizzato in un array di int (quindi int[]) e poi fare moltiplicazioni 64x64 bit dove però la parte alta è 0.
In pratica 2 int li converti a long facendo una apposita mascheratura (perché altrimenti si estende il segno) e poi li moltiplichi. È chiaro che devi poi fare delle somme e tenere in considerazione il "carry".

Ma sappi che questo modo di operare è proprio quello che viene usato dal BigInteger di Java. Quindi non è certo una cosa così "campata in aria".