Factorial digit sum

Find the sum of the digits in the number  N!.

Example:

Input:  6
Output: 9  //i.e 6!=720 ,7+2+0=9

Approach

Java

public class FactorialDigitSum {
    public static void main(String[] args) {

        int n = 6;
        int fSum = factorial(n);
        System.out.println(fSum);
    }

    static int multiply(int xint res[], int res_size) {
        int carry = 0;

        for (int i = 0; i < res_size; i++) {
            int prod = res[i] * x + carry;
            res[i] = prod % 10;
            carry = prod / 10;
        }

        while (carry > 0) {
            res[res_size] = carry % 10;
            carry = carry / 10;
            res_size++;
        }
        return res_size;
    }

    // function to find the factorial
    // of the given number
    static int factorial(int n) {
        int res[] = new int[10000];

        res[0] = 1;
        int res_size = 1;

        for (int x = 2; x <= n; x++) {
            res_size = multiply(x, res, res_size);
        }

        int sum = 0;
        for (int i = res_size - 1; i >= 0; i--)
            sum += res[i];
        return sum;
    }

}

C++

#include <bits/stdc++.h>
using namespace std;

#define MAX 10000
int multiply(int xint res[], int res_size)
{
    int carry = 0;

    for (int i=0i<res_sizei++)
    {
        int prod = res[i] * x + carry;
        res[i] = prod % 10;  
        carry  = prod/10;    
    }

    while (carry)
    {
        res[res_size] = carry%10;
        carry = carry/10;
        res_size++;
    }
    return res_size;
}

//function to find the factorial
//of the given number
int  factorial(int n)
{
    int res[MAX];

    res[0] = 1;
    int res_size = 1;

    for (int x=2x<=nx++)
    {
        res_size = multiply(xresres_size);
    }

   
   int sum=0;
    for (int i=res_size-1i>=0i--)
    sum+=res[i];
  return sum;
}
int main()
{
    
    int n=6;
   
    cout<<factorial(n);
    return 0;
}


No comments:

Post a Comment