2010-09-24 14 views
2

comment obtenir la valeur d'un entier x, indiqué par x!, c'est le produit des nombres 1 à x.Comment calculer la factorielle de x

Exemple: 5! 1x2x3x4x5 = 120.

int a , b = 1, c = 1, d = 1; 
printf("geheel getal x = "); 
scanf("%d", &a); 
printf("%d! = ", a); 
for(b = 1; b <= a; b++) 
{ 
    printf("%d x ", c); 
    c++; 
    d = d*a; 
} 
printf(" = %d", d); 
+2

Par le regard de celui-ci, la variable c est redondant. –

+1

@Alexander: Quelqu'un lui a probablement dit de l'écrire en C++. –

Répondre

6

comment obtenir le som d'un entier x, indiquée par x !, est le produit des nombres de 1 à x.

Avez-vous voulu dire factorial de x?

changement d = d*a; à d = d*b dans la boucle

+1

Et vous pouvez printf() et multiplier à la même variable aussi! Ils sont assez flexibles et ne périssent pas d'un usage partagé. – blaze

6

Vous pouvez simplement faire:

for(b = 1; b <= a; b++) { 
    d *= b; 
} 
// d now has a! 
2

Essayez

d = d * b; 

au lieu de

d = d * a 

et cela devrait fonctionner correctement

0

Vous avez réellement beaucoup de code redondant là-bas, c'est peut-être pourquoi vous n'avez pas repéré l'erreur vous-même.

Pour calculer la factorielle, vous avez seulement besoin de l'accumulateur (d dans le code ci-dessus) et de l'entrée (a). Pourquoi?

5

Ceci est la mise en œuvre optimale de la taille et de la vitesse:

int factorial(int x) 
{ 
    static const int f[13] = { 1, 1, 2, 6, 24, 120, /* ... */ }; 
    if ((unsigned)x < (sizeof f/sizeof f[0])) return f[x]; 
    else return INT_MAX+1; /* or your favorite undefined behavior */ 
} 

Conseil: x! (x factoriel) ne rentre pas dans un entier à l'exception des valeurs très faibles de très x.

+0

Excellente réponse! Je suis content que quelqu'un a souligné ce problème de débordement critique. – JoshD

0

Mon code n'est pas bon que d'autres, mais ça marche pour moi:

#include <iostream> 
using namespace std; 

unsigned int fattoriale (int n){ 
    if (n == 1){ 
     return 1; 
    } 
    else { 
     return n * fattoriale(n-1); 
    } 
} 

int main() { 
    int tmp, num; 
    cin >> num; 

    tmp = fattoriale(num); 

    cout << "Stampo il fattoriale del numero inserito: " << tmp << endl; 

} 
0
int factorial(int x) 
{ 
    int f; 
    if (x == 0) 
    { 
     f = 1; 
    } 
    else if (x > 0) 
    { 
    f = x*factorial(x-1); 
    } 
    return f; 
} 

int main() 
{ 
    int n = 0; 
    cout << factorial(n); 

    return 0; 
} 
Questions connexes