Skip to content
thecscience
THECSICENCE

Learn everything about computer science

  • Home
  • Human values
  • NCERT Solutions
  • HackerRank solutions
    • HackerRank Algorithms problems solutions
    • HackerRank C solutions
    • HackerRank C++ solutions
    • HackerRank Java problems solutions
    • HackerRank Python problems solutions
thecscience
THECSICENCE

Learn everything about computer science

HackerRank Extra Long Factorials Problem Solution

Yashwant Parihar, April 16, 2023April 16, 2023

In this post, We will solve HackerRank Extra Long Factorials Problem Solution.

The factorial of the integer n, written n!, is defined as:
n! = n x (n-1) x (n-2) x x3x2 x 1
Calculate and print the factorial of a given integer.
For example, if n = 30, we calculate 30 x 29 x 28 x … x 2 x 1 and get 265252859812191058636308480000000.
Function Description
Complete the extraLongFactorials function in the editor below. It should print the result and return.
extraLongFactorials has the following parameter(s):

  • n: an integer

Note: Factorials of n > 20 can’t be stored even in a 64-bit long long variable. Big integers must be used for such calculations. Languages like Java, Python, Ruby etc. can handle big integers, but we need to write additional code in C/C++ to handle huge values. We recommend solving this challenge using BigIntegers.

Input Format
Input consists of a single integer n
Constraints
1 ≤ n ≤ 100
Output Format
Print the factorial of n.
Sample Input
25
Sample Output
15511210043330985984000000
Explanation
25! 25 x 24 x 23 x x 3 x 2 x 1

HackerRank Extra Long Factorials Problem Solution
HackerRank Extra Long Factorials Problem Solution

Extra Long Factorials C Solution

#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>

#define MaxC    200

char O[MaxC];
char S[MaxC];
char T[MaxC];

void Asd(int d1, int d2, int c1, char *o, int *c2) {
    int Sum;
    
    Sum = d1 + d2 + c1;
    
    *o = (Sum % 10) + 0x30;
    *c2 = (Sum / 10);
}

void Msd(int d1, int d2, int c1, char *o, int *c2) {
    int Sum;
    
    Sum = (d1 * d2) + c1;
    
    *o = (Sum % 10) + 0x30;
    *c2 = (Sum / 10);
}

void DoFactorial(int i) {
    int o, c;
    
    if (i == 100) {
        o = 2;
        while (o < MaxC-2) {
            O[o-2] = O[o];
            o++;
        }
        O[MaxC-3] = '0';
        O[MaxC-2] = '0';
    }
    else {     
        o = MaxC-2;
        c = 0;
        while (O[o] != ' ') {
            Msd(O[o]-0x30, i%10, c, S+o, &c);
            o--;
        }
    
        if (c > 0) S[o] = c + 0x30;
    
        if (i>9) {
            o = MaxC-2;
            c = 0;
            while(O[o] != ' ') {
                Msd(O[o]-0x30, i/10, c, T+o-1, &c);
                o--;
            }
    
            if (c > 0) T[o-1] = c + 0x30;
        }
    
        o = MaxC-2;
        c = 0;
        while ((S[o] != ' ') || (T[o] != ' ')) {
            if (S[o] == ' ')
                Asd(0, T[o]-0x30, c, O+o, &c);
            else
                if (T[o] == ' ')
                    Asd(S[o]-0x30, 0, c, O+o, &c);
                else
                    Asd(S[o]-0x30, T[o]-0x30, c, O+o, &c);
            o--;
        }
    
        if (c > 0) O[o] = c + 0x30;
    
    }
}

int main() {
    int n, i;
    
    for (i=0; i<MaxC-2; i++) {
        O[i] = ' ';
        S[i] = ' ';
        T[i] = ' ';
    }
    O[MaxC-2] = '1';
    S[MaxC-2] = '0';
    T[MaxC-2] = '0';
    O[MaxC-1] = 0;
    S[MaxC-1] = 0;
    T[MaxC-1] = 0;
    
    scanf("%d", &n);
    
    for (i=1; i<=n; i++) {
        DoFactorial(i);
    }
    
    i=0;
    while (O[i] == ' ') {
        i++;
    }    
    printf("%s", O+i);
    
 #if 0  
    i=0;
    while (S[i] == ' ') {
        i++;
    } 
    printf("\n%s", S+i);
    
    i=0;
    while (T[i] == ' ') {
        i++;
    }
    printf("\n%s", T+i); 
#endif
    
    return 0;
}

Extra Long Factorials C++ Solution

#include <cmath>
#include <cstdio>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;


int main() {
    int number[300] = {};
    int n = 0;
    cin >> n;
    number[0] = 1;
    int len = 1;
    for (int i = 2; i <= n; ++i) {
        for (int pos = 0, r = 0; pos < len || r != 0; ++pos) {
            if (pos < len)
                r += number[pos] * i;
            else
                ++len;
            number[pos] = r % 10;
            r /= 10;
        }
    }
    for (int i = len - 1; i >= 0; --i)
        cout << number[i];
    return 0;
}

Extra Long Factorials C Sharp Solution

using System;
using System.Collections.Generic;
using System.IO;
using System.Text;
using System.Linq;
class Solution {
    
      private static string Add(string first, string second)
        {
            var split = 0;
            if (first.Length < second.Length)
            {
                var s = new StringBuilder();
                s.Append('0', second.Length - first.Length);
                s.Append(first);
                first = s.ToString();
            }
            if (second.Length < first.Length)
            {
                var s = new StringBuilder();
                s.Append('0', first.Length - second.Length);
                s.Append(second);
                second = s.ToString();
            }
            var ret = new StringBuilder();

            for (int i = first.Length - 1; i >= 0; i--)
            {
                var rr = int.Parse(first[i].ToString()) + int.Parse(second[i].ToString()) + split;

                split = int.Parse(rr.ToString("00")[0].ToString());
                ret.Append(rr.ToString("00")[1]);
            }

            ret.Append(split);

            return new string(ret.ToString().ToCharArray().Reverse().ToArray());
        }

        private static string mul(string first, string second)
        {
            var ret = new string('0', first.Length);

            for (int i = second.Length - 1; i >= 0; i--)
            {
                var b = new StringBuilder();
                b.Append(mul(first, int.Parse(second[i].ToString())));
                b.Append('0', second.Length - 1 - i);

                ret = Add(ret, b.ToString());
            }
            var r = new StringBuilder();


            return ret.TrimStart('0');

        }

        private static string mul(string first, int second)
        {

            var split = 0;

            var ret = new StringBuilder();

            for (int i = first.Length-1; i >= 0; i--)
            {
                var rr = int.Parse(first[i].ToString()) * second+split;

                split = int.Parse(rr.ToString("00")[0].ToString());
                ret.Append(rr.ToString("00")[1]);
            }

            ret.Append(split);

            return new string(ret.ToString().ToCharArray().Reverse().ToArray());
        }    
    static void Main(String[] args) {
             var inp = int.Parse(Console.ReadLine());

            string ret = inp.ToString();
            for (int i = inp - 1; i > 0; i--)
            {
                ret = mul(ret, i.ToString());
                //Console.WriteLine(ret);
                
            }

            Console.WriteLine(ret);
        
        /* Enter your code here. Read input from STDIN. Print output to STDOUT. Your class should be named Solution */
    }
}

Extra Long Factorials Java Solution

import java.io.*;
import java.math.*;
import java.security.*;
import java.text.*;
import java.util.*;
import java.util.concurrent.*;
import java.util.function.*;
import java.util.regex.*;
import java.util.stream.*;
import static java.util.stream.Collectors.joining;
import static java.util.stream.Collectors.toList;
import java.math.BigInteger;

class Result {

    /*
     * Complete the 'extraLongFactorials' function below.
     *
     * The function accepts INTEGER n as parameter.
     */

    public static void extraLongFactorials(int n) {
        BigInteger sum=new BigInteger("1");
    for(int i=1;i<n+1;i++){
        sum=sum.multiply(BigInteger.valueOf(i));
    }
    System.out.println(sum);

    }

}

public class Solution {
    public static void main(String[] args) throws IOException {
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));

        int n = Integer.parseInt(bufferedReader.readLine().trim());

        Result.extraLongFactorials(n);

        bufferedReader.close();
    }
}

Extra Long Factorials JavaScript Solution

function processData(input) {
    //Enter your code here
    input
    var res = 1
    for (var i = 1; i <= input; i++) {
        res = mult(res.toString(), i.toString())
    }
    process.stdout.write(res)
    function mult(num1,num2){
        var a1 = num1.split("").reverse();
        var a2 = num2.split("").reverse();
        var aResult = new Array;

        for ( iterNum1 = 0; iterNum1 < a1.length; iterNum1++ ) {
            for ( iterNum2 = 0; iterNum2 < a2.length; iterNum2++ ) {
                idxIter = iterNum1 + iterNum2;	// Get the current array position.
                aResult[idxIter] = a1[iterNum1] * a2[iterNum2] + ( idxIter >= aResult.length ? 0 : aResult[idxIter] );

                if ( aResult[idxIter] > 9 ) {	// Carrying
                    aResult[idxIter + 1] = Math.floor( aResult[idxIter] / 10 ) + ( idxIter + 1 >= aResult.length ? 0 : aResult[idxIter + 1] );
                    aResult[idxIter] -= Math.floor( aResult[idxIter] / 10 ) * 10;
                }
            }
        }
        return aResult.reverse().join("");
    }

} 

process.stdin.resume();
process.stdin.setEncoding("ascii");
_input = "";
process.stdin.on("data", function (input) {
    _input += input;
});

process.stdin.on("end", function () {
   processData(_input);
});

Extra Long Factorials Python Solution

import math

case = int(input())

print(math.factorial(case))

other solutions

  • HackerRank Append and Delete Problem Solution
  • HackerRank Sherlock and Squares Solution
c C# C++ HackerRank Solutions java javascript python CcppCSharpHackerrank Solutionsjavajavascriptpython

Post navigation

Previous post
Next post

Leave a Reply

You must be logged in to post a comment.

  • HackerRank Dynamic Array Problem Solution
  • HackerRank 2D Array – DS Problem Solution
  • Hackerrank Array – DS Problem Solution
  • Von Neumann and Harvard Machine Architecture
  • Development of Computers
©2025 THECSICENCE | WordPress Theme by SuperbThemes