1

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);
codaddict
  • 445,704
  • 82
  • 492
  • 529
User6996
  • 2,953
  • 11
  • 44
  • 66

7 Answers7

6

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

Prasoon Saurav
  • 91,295
  • 49
  • 239
  • 345
  • 1
    And you can printf() and multiply to the same variable also! They are quite flexible and will not perish from shared usage. – blaze Sep 24 '10 at 14:34
6

You can simply do:

for(b = 1; b <= a; b++) {
  d *= b;
}
// d now has a!
codaddict
  • 445,704
  • 82
  • 492
  • 529
5

This is the optimal implementation in size and speed:

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 */
}

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

R.. GitHub STOP HELPING ICE
  • 208,859
  • 35
  • 376
  • 711
2

Try

d = d * b;

instead of

d = d * a

and it should work fine

Patrice Bernassola
  • 14,136
  • 6
  • 46
  • 59
0

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?

Christoffer
  • 12,712
  • 7
  • 37
  • 53
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;

}
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;
}
Brandon Minnick
  • 13,342
  • 15
  • 65
  • 123
Umair Zia
  • 15
  • 1
  • 2