In this example, we will learn to write a program to find the factorial of a number in C. This example will be using loops and conditional statements to find the factorial.

**What is a factorial?**

The factorial of a non-negative number is the product of all the natural numbers which are less than or equal to that number. From definition, we can say that the factorial of a number is always a positive natural number.

Example:

Factorial of 5 = 1 * 2 * 3 * 4 * 5 = 120 Factorial of 6 = 1 * 2 * 3 * 4 * 5 * 6 = 720

The factorial of a number is denoted by the number followed by the explanation mark.

So above example can be written as,

5! = 1 * 2 * 3 * 4 * 5 = 120 6! = 1 * 2 * 3 * 4 * 5 * 6 = 720

From the definition, the factorial of a number can generalized as,

N! = 1 * 2 * 3 * . . . * (N - 2) * (N - 1) * N

Moreover, the factorial of 0 is always 1. Why is it so? You can read it about it here.

0! = 1

Likewise, the factorial of 1 is also 1,

1! = 1

To find the factorial, a number must not be negative or in decimals.

## Algorithm to find the factorial of a number

We will use the variable “num” to store the value of the entered number. Algorithm is given as below,

Step 1: Start. Step 2: Take an integer number as input in variable num and initialize i = 1. Step 3: Check if the num is less than 0. If yes, Display “Factorial of a negative number does not exist.” And go to step 6 Step 4: Repeat until i is less than or equals to num, fact = fact * i i = i + 1 Step 5: Display factorial of the given number. Step 6: End

In Short,

Start, Take input in num i = 1 if num < 0, Display “Factorial of a negative number does not exist.” else Repeat until i <= num, fact = fact * i i = i + 1 Display factorial of number End.

** Also Read:** C Program to Swap two numbers without Using a Temporary Variable

## Program to find the factorial of a number using for loop

#include <stdio.h> int main() { int num, i; unsigned long fact = 1; printf("Enter an integer: "); scanf("%d", &num); if (num < 0) printf("Factorial of negative number doesn't exist."); else { for (i = 1; i <= num; i++) { fact = fact * i; } printf("Factorial of %d = %lu", num, fact); } return 0; }

**Output**

Enter an integer: 6 Factorial of 6 = 720

Enter an integer: 0 Factorial of 0 = 1

Enter an integer: 1 Factorial of 1 = 1

**Explanation**

- We have used
**unsigned long**data type for**fact**variables because factorial cannot be negative and the product of all numbers can be very large. - At first, we checked if the number is negative or not. This is important since we cannot find the factorial of a negative number. We checked this by the condition,

num < 0

This is used with the if statement.

if (num < 0) . . .

- If number is positive, we loop until
**i <= num**,

for (i = 1; i <= num; i++) { . . . }

- Then we multiply each number with
**fact**until we reach the number itself,

fact = fact * i

This can also be written as,

fact *= i

- If the number is 0, control does not go inside the for loop. This is because the condition
**i<=num**is not satisfied.

For 0, 1 <= 0 // since i = 1 and num = 0 So, condition is not satisfied and control is not transferred to the loop

So, the initial value of fact i.e. 1 is the factorial of 0.

- However, for 1 control goes inside the loop since condition is satisfied.

For 1, 1 <= 1 // since i = 1 and num =1 So, condition is satisfied and control is transferred to the loop

But it runs only once,

For i = 1, fact = 1 * 1 // since, initially fact = 1 and i = 1

Therefore, fact = 1. This means that, factorial of 1 is 1.

** Also Read:** C program to find the size of data types using sizeof operator

## Program using while loop

#include <stdio.h> int main() { int num, i=1; unsigned long fact = 1; printf("Enter an integer: "); scanf("%d", &num); if (num < 0) printf("Factorial of negative number doesn't exist."); else { while(i<=num) { fact = fact * i; i++; } printf("Factorial of %d = %lu", num, fact); } return 0; }

**Output**

Enter an integer: 5 Factorial of 5 = 120

**Explanation**

- Finding factorial of a number using
**while**loop is same as**for**loop. It has slightly different syntax and everything is same.

while(i <= num) { . . . i++; }

Here, at first line we are checking the condition if the counter i.e. **i** is less than or equal to **num**.

While in **for** loop we increment/decrement value along with checking condition in **while** loop it is done in different place.

- Other steps are same as for loop.

** Also Read:** C Program to Find ASCII Value of a Character & Vice Versa

## Program Using do…while loop

#include <stdio.h> int main() { int num, i=1; unsigned long fact = 1; printf("Enter an integer: "); scanf("%d", &num); if (num < 0) printf("Factorial of negative number doesn't exist."); else { do { fact = fact * i; i++; } while(i<=num); printf("Factorial of %d = %lu", num, fact); } return 0; }

**Output**

Enter an integer: 7 Factorial of 7 = 5040

**Explanation**

**do…while**implementation is same as**while**implementation it is only different in syntax.

In**while**loop we check at the beginning of the loop but in**do…while**we check at the end of the loop.

do { fact = fact * i; i++; } while(i <= num);

**More Examples**