Vorrei implementare una classe BigInt che sia in grado di gestire numeri veramente grandi. Voglio solo aggiungere e moltiplicare i numeri, tuttavia la classe dovrebbe anche gestire i numeri negativi.Quale struttura dati dovrei usare per la classe BigInt
Volevo rappresentare il numero come una stringa, ma c'è un grande sovraccarico con la conversione della stringa in int e ritorno per l'aggiunta. Voglio implementare l'aggiunta come al liceo, aggiungere l'ordine corrispondente e se il risultato è maggiore di 10, aggiungere il riporto al prossimo ordine.
Quindi ho pensato che sarebbe stato meglio gestirlo come un array di unsigned long long int e mantenere il segno separato da bool. Con questo ho paura della dimensione dell'int, come standard C++ per quanto ne so garantisce solo che int < float < doppio. Correggimi se sbaglio. Quindi, quando raggiungo un certo numero, devo spostarmi in array in avanti e iniziare ad aggiungere il numero alla successiva posizione dell'array.
Esiste una struttura dati appropriata o migliore per questo?
Suona come un'implementazione ragionevole per me. Ma se usi ULONG, ogni elemento dell'array può contenere un valore compreso tra 0 e 2^32-1 anziché tra 0 e 10. Ciò dovrebbe far risparmiare qualche byte. :-) –
Lo standard garantisce solo 'float <= double' (notare il segno di uguale) – ipc
Sì, è esattamente quello che intendevo. Ma 2^32 - 1 è uguale su Linux e su Solaris? Rispettivamente è la dimensione garantita ovunque? Il mio punto è che, ad esempio, ottengo MyBigIntClass number = "234567434256547"; e comincio a convertire questo numero di stringa nella mia rappresentazione interna nella classe che viene usata per lungo int (forse :-)), e dopo che il numero raggiunge 2^32 mi sposto in un'altra posizione nell'array. È corretto? – user1086004