Problema fattoriale

di
Anonimizzato26979
il
17 risposte

Problema fattoriale

Salve a tutti ragazzi, innanzitutto vi porgo i miei saluti in quanto mi sono appena iscritto, e spero vivamente di potervi e poterci aiutare sempre tra di noi.
Il mio problema è il seguente, vi posto il codice:

int num;
            int numcostante;
            int doublefattoriale = 1;
            cout << "Inserisci il numero: " << endl;
            cin >> num;
            numcostante = num;

            if(num==0)
            {
                cout << 1 << endl;
            }
            else
            {
              for(int x=0; x<numcostante; x++)
              {
                  doublefattoriale = doublefattoriale*num;
                  num = num-1;
              }

              cout << doublefattoriale << endl;
            }
Il fattoriale viene calcolato in modo corretto fino al valore di 12, se invece viene calcolato il fattoriale di 13 o maggiore di esso, mi riporta un valore errato. Dove sta l'intoppo?
Grazie mille per ogni risposta

17 Risposte

  • Re: Problema fattoriale

    13! è il primo numero a 64 bit. Usa i long
  • Re: Problema fattoriale

    Ciao a tutti! Anche io volevo fare la stessa domanda, sapevo che era il primo numero a 64 bit ma anche quando utilizzo long int non mi funziona. Quali possono essere le cause?
    Sto utilizzando DEVC++.

    Grazie
  • Re: Problema fattoriale

    I long non bastano perché sono a 32 bit in un sistema a32 bit. Usa int64_t o longlong o un altro tipo di dato che il tuo compilatore supporta a 64 bit
  • Re: Problema fattoriale

    Ho appena notato che il mio compilatore incluso in DEVC++ supporta 32 bit, è quindi causato da questo?

    Grazie
  • Re: Problema fattoriale

    Leggi bene quello che ti è stato detto
  • Re: Problema fattoriale

    Int64_t è C99. Sono passati vent'anni: se il compilatore non lo supporta disinstallalo immediatamente
  • Re: Problema fattoriale

    Ho provato ad usare long long e con questo riesce a calcolare il fattoriale fino a 20.
    Sono alle prime armi con programmazione e non ho ben capito come mai long, che dovrebbe permettere di calcolare numeri più elevati di int, non va oltre il 12 (come int).

    Grazie
  • Re: Problema fattoriale

    Int e long sono la stessa cosa nel caso specifico e sono a 32 bit
  • Re: Problema fattoriale

    E qual è quindi la differenza tra i 2?
  • Re: Problema fattoriale

    La grandezza di int dipende all'implementazione può essere a 32 bit come il long in una architettura a 32 bit
  • Re: Problema fattoriale

    Nei processori a 16 bit di solito int è da 16 bit e long da 32. Nei processori a 32 bit sono entrambe da 32 bit, nei processori a 64 bit long diventa da 64 bit

    Ma quanto detto sopra non è comunque garantito al 100%: la norma specifica solo che int deve essere almeno a 16 bit e long almeno a 32 bit

    Comunque ha ragione oregon, usa i nuovi tipi e fai prima, il codice è più portabile senza stare a vedere sizeof(int) e sizeof(long)
  • Re: Problema fattoriale

    Ok grazie mille! Un'ultima domanda (leggermente off-topic)... Quando ho due cicli annidati, ad esempio 2 while, come disegno il diagramma di flusso? Sono annidati o li disegno uno dopo l'altro?

    Grazie
  • Re: Problema fattoriale

    Se sono annidati li disegni annidati. Mi pare ovvio.
  • Re: Problema fattoriale

    Quindi se ho ad esempio due cicli while, disegno il primo rombo con la condizione più interna (del secondo while) e in seguito quello con la condizione più esterna (del primo while)?
Devi accedere o registrarti per scrivere nel forum
17 risposte