Verificare se un numero è un quadrato perfetto in c++

ilario991
Ho bisogno che un mio programma verificasse se un numero è un quadrato perfetto oppure no, ma non saprei come fare, ovvero da dove iniziare. Qualcuno di voi ha qualche idea?

Risposte
netarrow
bhè per iniziare devi sapere cosè un quadrato perfetto, in caso contrario ricerca su google e trovi:
http://it.wikipedia.org/wiki/Quadrato_perfetto

una soluzione veloce è quindi calcolare la radice del numero e farne la differenza con la sua parte intera (che si può ottenere con un cast a int che tronca i decimali).
Se il risultato è 0 vuol dire che non c'è parte decimale e quindi il numero è un quadrato perfetto visto che la sua radice è intera.

eugenio.amitrano
...
int numero;
int radice;
...
radice = sqrt(numero);
if(radice*radice == numero)
cout << "è un qudratao perfetto";
...

ilario991
"netarrow":
bhè per iniziare devi sapere cosè un quadrato perfetto, in caso contrario ricerca su google e trovi:
http://it.wikipedia.org/wiki/Quadrato_perfetto

una soluzione veloce è quindi calcolare la radice del numero e farne la differenza con la sua parte intera (che si può ottenere con un cast a int che tronca i decimali).
Se il risultato è 0 vuol dire che non c'è parte decimale e quindi il numero è un quadrato perfetto visto che la sua radice è intera.


potresti farmi un esempio dell'uso di cast, xkè nn mi è ben chiaro. Per il resto ho capito, grz

netarrow
il codice di eugenio.amitrano usa già un cast, implicito però.
sqrt ritorna double ma venendo inserito in un intero viene convertito (tramite un cast appunto) in un int e quando si converte un numero con la virgona in un intero si perde di precisione visto che il computer non memorizza più la parte decimale (che viene troncata senza arrotondamenti).

se vuoi un esempio di cast esplicito basta specificare il tipo fra parentesi:

long a =1000000000;
int b = (int) a;

così dici esplicitamente che vuoi convertire long in int, e che sei quindi consapevole di perdere parte del risultato perché int ha ha un range (un intervallo di valori) più ristretto di un long.

Cmq usa la soluzione eugenio.amitrano che è molto più compatta!

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.