• C

Working out factorial positive integer

i need to work out the factorial of a positive integer. ie the number multiplied by all the integers smaller than it down to 1. eg "5" = 5*4*3*2*1 = 120.
i also need to incorporate a test harness.
the code i have written works out teh factors of any given number but i am not sure off how to work out the final answer. ie. how to multiply them together.

#include<stdio.h>

void main (void){

      int num,x;
      void factorial(int);

      printf("Please enter an integer: ");
      scanf("%d", &num);
      fflush(stdin);



      for(x=1; x<num; x++)
            factorial (x);
}

void factorial (int x){
      printf("x = %d\n", x);


help would b much appreciated. cheers.
pete420Asked:
Who is Participating?

[Product update] Infrastructure Analysis Tool is now available with Business Accounts.Learn More

x
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

imladrisCommented:
#include<stdio.h>

void main (void){

     int num,x;
     void factorial(int);

     printf("Please enter an integer: ");
     scanf("%d", &num);
     fflush(stdin);



     for(x=1; x<num; x++)    /* A */
          factorial (x);    
}

void factorial (int x){
     printf("x = %d\n", x);

At A it looks like you are going to be calculating separate factorials for each x from 1 to num. So for 1 you get 1, for 2 you get 2, for 3 you get 6 for 4 you get 24 etc. Is that what you want?

The factorial function itself needs to multiply all the numbers from itself down to 1. So a loop is indicated:

for(i=x; i>=1; --i)
{   ...
}

So inside this loop you should have a variable that you successively multiply by i to get the factorial of x.
0
pete420Author Commented:
yes your examples are correct of what i want. .

are u suggesting i remove my loop at A? the factorial i am tryin to work out is of the variable 'num'.

updated code:
#include<stdio.h>

void main (void){

      int num,x,i;
      void factorial(int);

      printf("Please enter an integer: ");
      scanf("%d", &num);
      fflush(stdin);



      for(x=1; x<num; x++)
            for(i=x; i>=1; --i){  
                  num = num *  x;
            }
            factorial (x);
}

void factorial (int x){
      printf("x = %d\n", x);

}
0
dhyaneshCommented:
Hi

Your factorial function should be somewhat like:

void factorial(int x)
{
     int i,fact = 1;
     for(i=1;i<=x;i++)
         fact = fact * i;
     printf("fact = %d\n", fact);
}

Thus this will calculate factorial of a number 'x' that is passed to this function and also print the factorial.

Dhyanesh
0

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
Check Out How Miercom Evaluates Wi-Fi Security!

It's not just about Wi-Fi connectivity anymore. A wireless security breach can cost your business large amounts of time, trouble, and expense. Plus, hear first-hand from Miercom on how WatchGuard's Wi-Fi security stacks up against the competition plus a LIVE demo!

pete420Author Commented:
excellent! many thanks!:D
0
dhyaneshCommented:
Hi

If you are finding factorial of 'num' only then the loop should be in function as I have put in my code.

Also then you only need to call the function ONCE and not in a for loop.

In what you have just posted is not right. Your variable num is continuously increasing resulting in outer for loop running almost infinitely.

Dhyanesh
0
pete420Author Commented:
this code below works spot on. im not sure what u mean in the above post. can u show me which loop u were refering to. thanks.

#include<stdio.h>

void main (void){

      int num,x,i;
      void factorial(int, int);

      printf("Please enter an integer: ");
      scanf("%d", &num);
      fflush(stdin);

      for(x=1; x<num; x++)
            for(i=x; i>=1; --i){  
            }
            factorial (x, num);
}


      void factorial(int x, int num)
{
     int i,fact = 1;
     for(i=1;i<=x;i++)
         fact = fact * i;
     printf("Factorial of %d = %d\n", num, fact);
}
0
imladrisCommented:
The for loops here:

for(x=1; x<num; x++)
          for(i=x; i>=1; --i){  
          }
          factorial (x, num);

Are completely redundant. They aren't doing anything useful. x increments from 1 to num, and for each of those iterations, i decrements from x to 1. So x and i go up and down a bunch. After that is all done factorial is called which then calculates the factorial for num.

Also, the factorial function should only get num passed in. And num should be used as the maximum of the loop. The x variable isn't really contributing anything to the factorial function either.
0
dhyaneshCommented:
Hi

--->for(x=1; x<num; x++)              //These two loops are doing nothing
 --->       for(i=x; i>=1; --i){  
         }
         factorial (x, num);

If you are finding factorial of only ONE number i.e. then only following is sufficient:


#include<stdio.h>

void main (void){

    int num,x,i;
    void factorial(int, int);

    printf("Please enter an integer: ");
    scanf("%d", &num);
    fflush(stdin);

             factorial (x, num);
}


    void factorial(int x, int num)
{
    int i,fact = 1;
    for(i=1;i<=x;i++)
        fact = fact * i;
    printf("Factorial of %d = %d\n", num, fact);
}
0
pete420Author Commented:
whenever i run the code u just posted and enter the integer as 5. the answer i receive is 1?? the correct answer would b 120.
0
dhyaneshCommented:
Hi

One more error. Sorry for that. In factorial you only need to pass ONE variable i.e num. 'x' is redundant

#include<stdio.h>

void main (void){

   int num,x,i;
   void factorial(int, int);

   printf("Please enter an integer: ");
   scanf("%d", &num);
   fflush(stdin);

   factorial (num);
}


   void factorial(int x)
{
   int i,fact = 1;
   for(i=1;i<=x;i++)
       fact = fact * i;
   printf("Factorial of %d = %d\n", x, fact);
}  

This would work just fine.

Dhyanesh
0
pete420Author Commented:
MANY thanks! i got anoter c question which im stuck on. will open another thread so that sum more points are available for it:)
0
harishg2Commented:
void facto(int x)
{
     int k,fact = 1;
     for(k=x;k<=x;k--)
         fact = fact * k;
     printf("fact = %d\n", fact);
}
0
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
C

From novice to tech pro — start learning today.