Fattoriale

di il
2 risposte

Fattoriale

Ciao a tutti,
sto facendo un po di pratica col c++ e in praticolare mi sto cimentando in un programmino che calcoli il fattoriale.Vi posto quello che ho combinato finora:

#include <iostream.h>
#include <stdlib.h>
#include<iomanip>

int main()
{
int i,N;
float p;
cout<<"dammi il numero di cui vuoi calcolare il fattoriale:"<<endl;
cin>>N;
p=1;
cout<<setw(4)<<"i"<<endl<<setw(30)<<p<<endl;
for(i=1;i<=N;i++){


p=p*i;
cout <<setw(4)<<i<<setw(30)<<p<<endl;
}

system("PAUSE");
return 0;
}


funziona fino a che non gli chiedo di calcolare il fattoriale di un numero > 34. a quel punto mi dice "INFINITY". come mai?come posso risolvere?

2 Risposte

  • Re: Fattoriale

    edmondantes ha scritto:


    funziona fino a che non gli chiedo di calcolare il fattoriale di un numero > 34. a quel punto mi dice "INFINITY". come mai?come posso risolvere?
    dipende dal fatto che il numero calcolato supera la capacità della variabile.
    potresti provare con una long double.
    comunque ti consiglio di usare il tipo double al posto del tipo float
    perché il double gestisce meglio la parte intera.
    comunque hai commesso una piccola dimenticanza e sarebbe questa:
    quanto fa il fattoriale di 0?
    la risposta è 1 per definizione.
    quindi ti consiglio di aggiungere le seguenti righe:
    
    if (N==0) { p=1;  cout << p; return 0;}
    
  • Re: Fattoriale

    Mmh a me non sembra, anche se non mi intendo di C++....
    
    p=1;
    for(i=1;i<=N;i++){
           p=p*i;
    Se N=0, il ciclo for non viene neanche eseguito perché 1<=0 è falsa, quindi p=1, quindi effettivamente l'algoritmo funziona perché 0!=1...
    Piuttosto sarebbe giusto controllare anche che N sia davvero un numero naturale, perché il fattoriale è notoriamente definito solo per quell'insieme...
Devi accedere o registrarti per scrivere nel forum
2 risposte