# Howto compute the factorial of x

how to get the value of an integer `x`, indicated by `x!`, it is the product of the numbers 1 to x.

Example: `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);
``````

how to get the som of an integer x, indicated by x!, is the product of the numbers 1 to x.

Did you mean `factorial` of x ?

Change `d = d*a;` to `d = d*b` inside the loop

Try

``````d = d * b;
``````

``````d = d * a
``````

and it should work fine

You can simply do:

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

You actually have a lot of redundant code there, that might be why you did not spot the error yourself.

To calculate the factorial, you only need the accumulator (`d` in the above code) and the input (`a`). Why?

This is the optimal implementation in size and speed:

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

Hint: `x!` (`x` factorial) does not fit in an int except for very very small values of `x`.

``````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;
}
``````

My code is not good as other but it works for me:

``````#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;

}
``````