Print factorials of a range in right aligned format
Last Updated :
22 Feb, 2023
Given two numbers m and n, the task is to find factorial of all numbers including m and n, and then print below format.
Examples:
Input : 6 10
Output :
720
5040
40320
362880
3628800
Input : 10 20
Output :
3628800
39916800
479001600
6227020800
87178291200
1307674368000
20922789888000
355687428096000
6402373705728000
121645100408832000
2432902008176640000
We used the boost multiprecision library for store the factorial of large number and print the factorial with the setw() function.
setw(int) -> setw(int) is a function is used for intention in the result.
C++
#include <boost/multiprecision/cpp_int.hpp>
#include <iostream>
#include <vector>
using namespace std;
using boost::multiprecision::cpp_int;
vector<cpp_int> find_factorial( int num1, int num2)
{
vector<cpp_int> vec;
cpp_int fac = 1;
int temp = num1;
while (1) {
if (temp == 1)
break ;
fac *= temp;
temp--;
}
vec.push_back(fac);
num1++;
while (num1 <= num2) {
fac *= num1;
vec.push_back(fac);
num1++;
}
return (vec);
}
void print_format(vector<cpp_int>& result)
{
int digits = result.back().str().size();
for ( int i = 0; i < result.size(); i++) {
cout << setw(digits + 1) <<
right << result[i] << endl;
}
}
int main()
{
int m = 10, n = 20;
vector<cpp_int> result_fac;
result_fac = find_factorial(m, n);
print_format(result_fac);
return 0;
}
|
Java
import java.util.*;
class GFG {
static ArrayList<Long> find_factorial( int num1,
int num2)
{
ArrayList<Long> vec = new ArrayList<Long>();
long fac = 1 ;
long temp = num1;
while ( true ) {
if (temp == 1 )
break ;
fac *= temp;
temp--;
}
vec.add(fac);
num1++;
while (num1 <= num2) {
fac *= num1;
vec.add(fac);
num1++;
}
return (vec);
}
static void print_format(ArrayList<Long> result)
{
int x = result.size();
int digits = String.valueOf(result.get(x - 1 )).length();
for ( int i = 0 ; i < x; i++) {
System.out.println(String.format(
"%1$" + (digits + 1 ) + "s" , result.get(i)));
}
}
public static void main(String[] args)
{
int m = 10 ;
int n = 20 ;
var result_fac = find_factorial(m, n);
print_format(result_fac);
}
}
|
Python
def find_factorial(num1, num2):
vec = []
fac = 1
temp = num1
while ( 1 ):
if (temp = = 1 ):
break
fac * = temp
temp = temp - 1
vec.append(fac)
num1 = num1 + 1
while (num1 < = num2):
fac * = num1
vec.append(fac)
num1 = num1 + 1
return (vec)
def print_format(result):
x = len (result)
digits = len ( str (result[x - 1 ]))
for i in range (x):
tmp = ""
for j in range (x - i):
tmp = tmp + ' '
result[i] = tmp + str (result[i])
print ( str (result[i]))
m = 10
n = 20
result_fac = find_factorial(m, n)
print_format(result_fac)
|
C#
using System;
using System.Collections.Generic;
class GFG
{
static List< long > find_factorial( int num1, int num2)
{
List< long > vec = new List< long >();
long fac = 1;
long temp = num1;
while ( true )
{
if (temp == 1)
break ;
fac *= temp;
temp--;
}
vec.Add(fac);
num1++;
while (num1 <= num2)
{
fac *= num1;
vec.Add(fac);
num1++;
}
return (vec);
}
static void print_format(List< long > result)
{
int x = result.Count;
int digits = Convert.ToString(result[x - 1]).Length;
for ( int i = 0; i < x; i++)
{
Console.WriteLine(Convert.ToString(result[i]).PadLeft(digits + 1));
}
}
public static void Main( string [] args)
{
int m = 10;
int n = 20;
var result_fac = find_factorial(m, n);
print_format(result_fac);
}
}
|
PHP
<?PHP
function find_factorial( $num1 ,
$num2 )
{
$vec ;
$t = 0;
$fac = 1;
$temp = $num1 ;
while (1)
{
if ( $temp == 1)
break ;
$fac *= $temp ;
$temp --;
}
$vec [ $t ++] = $fac ;
$num1 ++;
while ( $num1 <= $num2 )
{
$fac *= $num1 ;
$vec [ $t ++] = $fac ;
$num1 ++;
}
return ( $vec );
}
function print_format( $result )
{
$x = count ( $result );
$digits = strlen ((string) $result [ $x - 1]);
for ( $i = 0; $i < $x ; $i ++)
{
echo str_pad ( $result [ $i ], ( $digits + 1),
" " , STR_PAD_LEFT) . "\n" ;
}
}
$m = 10;
$n = 20;
$result_fac ;
$result_fac = find_factorial( $m , $n );
print_format( $result_fac );
?>
|
Javascript
<script>
function find_factorial(num1, num2)
{
let vec = [];
let t = 0;
let fac = 1;
let temp = num1;
while (1)
{
if (temp == 1)
break ;
fac *= temp;
temp--;
}
vec[t++] = fac;
num1++;
while (num1 <= num2)
{
fac *= num1;
vec[t++] = fac;
num1++;
}
return (vec);
}
function print_format(result)
{
let x = result.length;
let digits = String(result[x - 1]).length;
for (let i = 0; i < x; i++)
{
result[i] = new Array(x - i).fill( " " ).join( " " ) +
result[i];
document.write(String(result[i]) + "<br>" );
}
}
let m = 10;
let n = 20;
let result_fac;
result_fac = find_factorial(m, n);
print_format(result_fac);
</script>
|
Output:
3628800
39916800
479001600
6227020800
87178291200
1307674368000
20922789888000
355687428096000
6402373705728000
121645100408832000
2432902008176640000
Time complexity : O(n)
Space complexity : O(n)
Like Article
Suggest improvement
Share your thoughts in the comments
Please Login to comment...