# Find last two digits of sum of N factorials

• Last Updated : 12 Apr, 2021

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

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

Input :4
Output :33
1!+2!+3!+4!=33
Last two digit is 33```

Attention reader! Don’t stop learning now. Get hold of all the important mathematical concepts for competitive programming with the Essential Maths for CP Course at a student-friendly price. To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

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

if (n < 10)
ans = (1 ! + 2 ! +..+ n !) % 100;
else
ans = (1 ! + 2 ! + 3 ! + 4 !+ 5 ! + 6 ! + 7 ! + 8 ! + 9 ! + 10 !) % 100;
Note : We know (1! + 2! + 3! + 4!+…+10!) % 100 = 13
So we always return 3 when n is greater
than 4.

Below is the implementation of above approach.

## C++

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

## Java

 `//Java program to find the unit place digit``//of the first N natural numbers factorials``public` `class` `AAA {` `    ``//Function to find the unit's and ten's place digit``    ``static` `int` `get_last_two_digit(``long` `N)``    ``{` `     ``// Let us write for cases when``     ``// N is smaller than or equal``     ``// to 10.``     ``if` `(N <= ``10``) {``         ``long` `ans = ``0``, fac = ``1``;``         ``for` `(``int` `i = ``1``; i <= N; i++) {``             ``fac = fac * i;``             ``ans += fac;``         ``}``         ``return` `(``int``)ans % ``100``;``     ``}` `     ``// We know following``     ``// (1! + 2! + 3! + 4!...+10!) % 100 = 13``     ``else` `// (N >= 10)``         ``return` `13``;``    ``}` `    ``//Driver code``    ``public` `static` `void` `main(String[] args) {``        ` `        ``long` `N = ``1``;``         ``for` `(N = ``1``; N <= ``10``; N++)``             ``System.out.println( ``"For N = "` `+ N``                  ``+ ``" : "` `+ get_last_two_digit(N));``    ``}` `}`

## Python3

 `# Python3 program to find the unit``# place digit of the first N natural``# numbers factorials` `# Function to find the unit's``# and ten's place digit``def` `get_last_two_digit(N):``    ` `    ``# Let us write for cases when``    ``# N is smaller than or equal``    ``# to 10``    ``if` `N <``=` `10``:``        ``ans ``=` `0``        ``fac ``=` `1``        ``for` `i ``in` `range``(``1``, N ``+` `1``):``            ``fac ``=` `fac ``*` `i``            ``ans ``+``=` `fac``        ``ans ``=` `ans ``%` `100``        ``return` `ans``        ` `    ``# We know following``    ``# (1! + 2! + 3! + 4!...+10!) % 100 = 13``    ``# // (N >= 10)``    ``else``:``        ``return` `13` `# Driver Code``N ``=` `1``for` `N ``in` `range``(``1``, ``11``):``    ``print``(``"For N = "``, N, ``": "``,``           ``get_last_two_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``// and ten's place digit``static` `int` `get_last_two_digit(``long` `N)``{` `// Let us write for cases when``// N is smaller than or equal``// to 10.``if` `(N <= 10)``{``    ``long` `ans = 0, fac = 1;``    ``for` `(``int` `i = 1; i <= N; i++)``    ``{``        ``fac = fac * i;``        ``ans += fac;``    ``}``    ``return` `(``int``)ans % 100;``}` `// We know following``// (1! + 2! + 3! + 4!...+10!) % 100 = 13``else` `// (N >= 10)``    ``return` `13;``}` `// Driver code``public` `static` `void` `Main()``{``    ``long` `N = 1;``    ``for` `(N = 1; N <= 10; N++)``        ``Console.WriteLine( ``"For N = "` `+ N +``            ``" : "` `+ get_last_two_digit(N));``}``}` `// This code is contributed``// by Akanksha Rai(Abby_akku)`

## PHP

 `= 10)``        ``return` `13;``}` `// Driver code``\$N` `= 1;``for` `(``\$N` `= 1; ``\$N` `<= 10; ``\$N``++)``    ``echo` `"For N = "` `. ``\$N` `. ``" : "` `.``          ``get_last_two_digit(``\$N``) . ``"\n"``;` `// This code is contributed``// by Akanksha Rai(Abby_akku)`

## Javascript

 ``
Output:
```For N = 1 : 1
For N = 2 : 3
For N = 3 : 9
For N = 4 : 33
For N = 5 : 53
For N = 6 : 73
For N = 7 : 13
For N = 8 : 33
For N = 9 : 13
For N = 10 : 13```

My Personal Notes arrow_drop_up