PDA

Visualizza la versione completa : [C] Aumentare grandezza variabile integer


mikispag
02-10-2005, 16:54
Ciao a tutti,

premetto che questa richiesta potrà sembrarvi insolita e stupida (e forse lo è :dhò: ).

Allora, ho intenzione di scrivere un programma che maneggi numeri MOLTO grandi (> 1.000.000 per intenderci).

Ho notato però che se eseguo un listato di questo tipo:


# include <stdio.h>

int x,i,esp;

int main(int argc, char * argv[]) {

if (argc < 2) {
printf ("Uso: %s numero\n", argv[0]);
exit (0);
}

x = atoi(argv[1]);

printf ("%d", x);

}

Il valore di x è troncato alle prime 10 cifre.

Come faccio a togliere questa limitazione?

Ho anche provato ad usare long, senza risultati.

Grazie a chiunque mi aiuterà.

alka
02-10-2005, 16:57
Il linguaggio di programmazione va indicato anche nel titolo, come da Regolamento (http://forum.html.it/forum/showthread.php?s=&threadid=862017).

Di cosa si tratta? C? C++?

Ciao! :ciauz:

mikispag
02-10-2005, 16:58
OOOpps :)

Corretto al volo!

Si tratta di C.

oregon
02-10-2005, 17:07
Numeri maggiori di un milione ... ma fino a quanto ?

Comunque puoi utilizzare un double ...

mikispag
02-10-2005, 17:14
E' proprio questo il punto :D

Come posso accettare per esempio 10.000.000.000 ?

Unsigned int arriva fino a +4,294,967,295 :(

oregon
02-10-2005, 17:24
Il double non ti va bene?

mikispag
02-10-2005, 17:28
Io vorrei trattare i numeri come integers :(

DYNAM!C+
02-10-2005, 17:43
Originariamente inviato da mikispag
Io vorrei trattare i numeri come integers :(

hai un po' di soluzioni...


ti crei una struttura con N campi unsigned long int quindi avrai 32xN bit a disposizione.

dovrai solo stare attento alle operazioni che fai su di essi...

XWolverineX
02-10-2005, 17:46
Basta che usi un double e poi gli fai un cast sopra :)
In C purtroppo non lo so fare, ma se fosse in C++ faresti



double Numero = 1029381209382;
//Operazione da fare: Numero + 1000
//Per trattarlo come int fai
static_cast<int>(Numero);

In questo modo il compilatore tratterà quel double come un semplice int

oregon
02-10-2005, 18:26
Originariamente inviato da mikispag
Io vorrei trattare i numeri come integers :(

Puoi usare interi a 64 bit se supportati dal compilatore che usi (che non so quale sia).

Se non devi fare particolare operazioni, i double dovrebbero comunque andare bene. Non so cosa devi fare e perche' hai la necessita' di usare interi ...

Loading