Skip to content
Related Articles

Related Articles

Improve Article
Save Article
Like Article

Find sum of digits in factorial of a number

  • Difficulty Level : Medium
  • Last Updated : 27 Apr, 2021

Given a number n, write code to find the sum of digits in the factorial of the number. Given n ≤ 5000
 

Examples: 

Input : 10
Output : 27

Input : 100
Output : 648

It is not possible to store a number as large as 100! under some data types so, idea is to store an extremely large number in a vector. 
 

1) Create a vector to store factorial digits and
   initialize it with 1.
2) One by one multiply numbers from 1 to n to 
   the vector. We use school mathematics for this
   purpose.
3) Sum all the elements in vector and return the sum.

C++

// C++ program to find sum of digits in factorial
// of a number
#include <bits/stdc++.h>
using namespace std;

// Function to multiply x with large number
// stored in vector v. Result is stored in v.
void multiply(vector<int> &v, int x)
{
    int carry = 0, res;
    int size = v.size();
    for (int i = 0 ; i < size ; i++)
    {
        // Calculate res + prev carry
        int res = carry + v[i] * x;

        // updation at ith position
        v[i] = res % 10;
        carry = res / 10;
    }
    while (carry != 0)
    {
        v.push_back(carry % 10);
        carry /= 10;
    }
}

// Returns sum of digits in n!
int findSumOfDigits(int n)
{
    vector<int> v;     // create a vector of type int
    v.push_back(1);    // adds 1 to the end

    // One by one multiply i to current vector
    // and update the vector.
    for (int i=1; i<=n; i++)
        multiply(v, i);

    // Find sum of digits in vector v[]
    int sum = 0;
    int size = v.size();
    for (int i = 0 ; i < size ; i++)
        sum += v[i];
    return sum;
}

// Driver code
int main()
{
    int n = 1000;
    cout << findSumOfDigits(n);
    return 0;
}

Java


// Java program to find sum of digits in factorial 
// of a number 
import java.util.*;
class GFG{
// Function to multiply x with large number 
// stored in vector v. Result is stored in v.
static ArrayList<Integer> v=new ArrayList<Integer>();
static void multiply(int x) 
{ 
    int carry = 0; 
    int size = v.size(); 
    for (int i = 0 ; i < size ; i++) 
    { 
        // Calculate res + prev carry 
        int res = carry + v.get(i) * x; 

        // updation at ith position 
        v.set(i,res % 10); 
        carry = res / 10; 
    } 
    while (carry != 0) 
    { 
        v.add(carry % 10); 
        carry /= 10; 
    } 
} 

// Returns sum of digits in n! 
static int findSumOfDigits(int n) 
{ 
    v.add(1); // adds 1 to the end 

    // One by one multiply i to current vector 
    // and update the vector. 
    for (int i=1; i<=n; i++) 
        multiply(i); 

    // Find sum of digits in vector v[] 
    int sum = 0; 
    int size = v.size(); 
    for (int i = 0 ; i < size ; i++) 
        sum += v.get(i); 
    return sum; 
} 

// Driver code 
public static void main(String[] args) 
{ 
    int n = 1000; 
    System.out.println(findSumOfDigits(n)); 
} 
}
// this code is contributed by mits

Python 3

# Python 3 program to find sum of digits
# in factorial of a number

# Function to multiply x with large number
# stored in vector v. Result is stored in v.
def multiply(v, x):
    carry = 0
    size = len(v)
    for i in range(size):
        
        # Calculate res + prev carry
        res = carry + v[i] * x

        # updation at ith position
        v[i] = res % 10
        carry = res // 10

    while (carry != 0):
        v.append(carry % 10)
        carry //= 10

# Returns sum of digits in n!
def findSumOfDigits( n):
    v = []     # create a vector of type int
    v.append(1) # adds 1 to the end

    # One by one multiply i to current 
    # vector and update the vector.
    for i in range(1, n + 1):
        multiply(v, i)

    # Find sum of digits in vector v[]
    sum = 0
    size = len(v)
    for i in range(size):
        sum += v[i]
    return sum

# Driver code
if __name__ == "__main__":
    
    n = 1000
    print(findSumOfDigits(n))

# This code is contributed by ita_c

C#


// C# program to find sum of digits in factorial 
// of a number 
using System;
using System.Collections;
class GFG{
// Function to multiply x with large number 
// stored in vector v. Result is stored in v.
static ArrayList v=new ArrayList();
static void multiply(int x) 
{ 
    int carry = 0; 
    int size = v.Count; 
    for (int i = 0 ; i < size ; i++) 
    { 
        // Calculate res + prev carry 
        int res = carry + (int)v[i] * x; 

        // updation at ith position 
        v[i] = res % 10; 
        carry = res / 10; 
    } 
    while (carry != 0) 
    { 
        v.Add(carry % 10); 
        carry /= 10; 
    } 
} 

// Returns sum of digits in n! 
static int findSumOfDigits(int n) 
{ 
    v.Add(1); // adds 1 to the end 

    // One by one multiply i to current vector 
    // and update the vector. 
    for (int i=1; i<=n; i++) 
        multiply(i); 

    // Find sum of digits in vector v[] 
    int sum = 0; 
    int size = v.Count; 
    for (int i = 0 ; i < size ; i++) 
        sum += (int)v[i]; 
    return sum; 
} 

// Driver code 
static void Main() 
{ 
    int n = 1000; 
    Console.WriteLine(findSumOfDigits(n)); 
} 
}
// this code is contributed by mits

PHP

<?php
// PHP program to find sum of digits in 
// factorial of a number 

// Function to multiply x with large number 
// stored in vector v. Result is stored in v. 
function multiply(&$v, $x) 
{ 
    $carry = 0; 
    $size = count($v); 
    for ($i = 0 ; $i < $size ; $i++) 
    { 
        // Calculate res + prev carry 
        $res = $carry + $v[$i] * $x; 

        // updation at ith position 
        $v[$i] = $res % 10; 
        $carry = (int)($res / 10); 
    } 
    while ($carry != 0) 
    { 
        array_push($v, $carry % 10); 
        $carry = (int)($carry / 10); 
    } 
} 

// Returns sum of digits in n! 
function findSumOfDigits($n) 
{ 
    $v = array(); // create a vector of type int 
    array_push($v, 1); // adds 1 to the end 

    // One by one multiply i to current vector 
    // and update the vector. 
    for ($i = 1; $i <= $n; $i++) 
        multiply($v, $i); 

    // Find sum of digits in vector v[] 
    $sum = 0; 
    $size = count($v); 
    for ($i = 0 ; $i < $size ; $i++) 
        $sum += $v[$i]; 
    return $sum; 
} 

// Driver code 
$n = 1000; 
print(findSumOfDigits($n)); 

// This code is contributed by mits 
?>


Javascript

<script>
// Javascript program to find sum of digits in factorial 
// of a number 
    
    // Function to multiply x with large number 
    // stored in vector v. Result is stored in v.
    let v=[];
    function multiply(x)
    {
        let carry = 0; 
    let size = v.length; 
    for (let i = 0 ; i < size ; i++) 
    { 
        // Calculate res + prev carry 
        let res = carry + v[i] * x; 
  
        // updation at ith position 
        v[i]=res % 10; 
        carry = Math.floor(res / 10); 
    } 
    while (carry != 0) 
    { 
        v.push(carry % 10); 
        carry = Math.floor(carry/10); 
    } 
    }
    
    // Returns sum of digits in n! 
    function findSumOfDigits(n)
    {
        v.push(1); // adds 1 to the end 
  
    // One by one multiply i to current vector 
    // and update the vector. 
    for (let i=1; i<=n; i++) 
        multiply(i); 
  
    // Find sum of digits in vector v[] 
    let sum = 0; 
    let size = v.length; 
    for (let i = 0 ; i < size ; i++) 
        sum += v[i]; 
    return sum; 
    }
    
    // Driver code 
    let n = 1000; 
    document.write(findSumOfDigits(n)); 
    
    
    // This code is contributed by avanitrachhadiya2155
</script>

Output: 
 

10539

 

My Personal Notes arrow_drop_up
Recommended Articles
Page :

Start Your Coding Journey Now!