Related Articles
Find the unit place digit of sum of N factorials
• Last Updated : 15 Apr, 2021

Given a number N, the task is to find units place digit of the first N natural numbers factorials, i.e. 1!+2!+3!+….N! where N<=10e18.
Examples:

```Input: n = 2
Output: 3
1! + 2! = 3
Last digit is 3

Input: n = 3
Output: 9
1! + 2! + 3! = 9
Last digit is 9```

Naive Approach: In this approach, simply calculate factorial of each number and find sum of these. Finally get the unit place digit of sum. This will take a lot of time and unnecessary calculations.
Efficient Approach: In this approach, only unit’s digit of N is to be calculated in the range [1, 5], because:
1! = 1
2! = 2
3! = 6
4! = 24
5! = 120
6! = 720
7! = 5040
so on.
As 5!=120, and factorial of number greater than 5 have trailing zeros. So, N>=5 doesn’t contribrute in unit place while doing sum.
Therefore:

```if (n < 5)
ans = (1 ! + 2 ! +..+ n !) % 10;
else
ans = (1 ! + 2 ! + 3 ! + 4 !) % 10;

Note : We know (1! + 2! + 3! + 4!) % 10 = 3
So we always return 3 when n is greater
than 4.```

Below is the implementation of the efficient approach:

## C++

 `// C++ program to find the unit place digit``// of the first N natural numbers factorials``#include ``using` `namespace` `std;` `// Function to find the unit's place digit``int` `get_unit_digit(``long` `long` `int` `N)``{` `    ``// Let us write for cases when``    ``// N is smaller than or equal``    ``// to 4.``    ``if` `(N == 0 || N == 1)``       ``return` `1;``    ``else` `if` `(N == 2)``       ``return` `3;``    ``else`  `if` `(N == 3)``       ``return` `9;` `    ``// We know following``    ``// (1! + 2! + 3! + 4!) % 10 = 3``    ``else` `// (N >= 4)``       ``return` `3;``}` `// Driver code``int` `main()``{``    ``long` `long` `int` `N = 1;` `    ``for` `(N = 0; N <= 10; N++)``        ``cout << ``"For N = "` `<< N``             ``<< ``" : "` `<< get_unit_digit(N)``             ``<< endl;` `    ``return` `0;``}`

## Java

 `// Java  program to find the unit place digit``// of the first N natural numbers factorials` `import` `java.io.*;` `class` `GFG {``    ` `    ` `// Function to find the unit's place digit``static` `int` `get_unit_digit(  ``int` `N)``{` `    ``// Let us write for cases when``    ``// N is smaller than or equal``    ``// to 4.``    ``if` `(N == ``0` `|| N == ``1``)``    ``return` `1``;``    ``else` `if` `(N == ``2``)``    ``return` `3``;``    ``else` `if` `(N == ``3``)``    ``return` `9``;` `    ``// We know following``    ``// (1! + 2! + 3! + 4!) % 10 = 3``    ``else` `// (N >= 4)``    ``return` `3``;``}` `// Driver code``    ` `    ``public` `static` `void` `main (String[] args) {``        ` `      ``int` `N = ``1``;` `    ``for` `(N = ``0``; N <= ``10``; N++)``            ``System.out.println (``"For N = "` `+ N``            ``+ ``" : "` `+ get_unit_digit(N));``    ``}``}``//This Code is Contributed by ajit`

## Python3

 `# Python3 program to find the unit``# place digit of the first N natural``# numbers factorials` `# Function to find the unit's place digit``def` `get_unit_digit(N):``    ` `    ``# Let us write for cases when``    ``# N is smaller than or equal``    ``# to 4.``    ``if` `(N ``=``=` `0` `or` `N ``=``=` `1``):``        ``return` `1``    ``elif` `(N ``=``=` `2``):``        ``return` `3``    ``elif``(N ``=``=` `3``):``        ``return` `9``        ` `    ``# We know following``    ``# (1! + 2! + 3! + 4!) % 10 = 3``    ``else``:``        ``return` `3` `# Driver code``N ``=` `1``for` `N ``in` `range``(``11``):``    ``print``(``"For N = "``, N, ``":"``,``        ``get_unit_digit(N), sep ``=` `' '``)` `# This code is contributed``# by sahilshelangia`

## C#

 `// C# program to find the unit``// place digit of the first N``// natural numbers factorials``using` `System;` `class` `GFG``{``    ` `// Function to find the unit's``// place digit``static` `int` `get_unit_digit( ``int` `N)``{` `    ``// Let us write for cases when``    ``// N is smaller than or equal``    ``// to 4.``    ``if` `(N == 0 || N == 1)``    ``return` `1;``    ``else` `if` `(N == 2)``    ``return` `3;``    ``else` `if` `(N == 3)``    ``return` `9;` `    ``// We know following``    ``// (1! + 2! + 3! + 4!) % 10 = 3``    ``else` `// (N >= 4)``    ``return` `3;``}` `// Driver code``static` `public` `void` `Main ()``{``    ``int` `N = 1;` `    ``for` `(N = 0; N <= 10; N++)``        ``Console.WriteLine (``"For N = "` `+ N +``                ``" : "` `+ get_unit_digit(N));``}``}` `// This Code is Contributed by akt_mit`

## PHP

 `= 4)``        ``return` `3;``}` `// Driver code``\$N` `= 1;` `for` `(``\$N` `= 0; ``\$N` `<= 10; ``\$N``++)``    ``echo` `"For N = "` `. ``\$N``.``         ``" : "` `. get_unit_digit(``\$N``) . ``"\n"``;` `// This code is contributed``// by ChitraNayal``?>`

## Javascript

 ``
Output:
```For N = 0 : 1
For N = 1 : 1
For N = 2 : 3
For N = 3 : 9
For N = 4 : 3
For N = 5 : 3
For N = 6 : 3
For N = 7 : 3
For N = 8 : 3
For N = 9 : 3
For N = 10 : 3```

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.

My Personal Notes arrow_drop_up