#include<iostream>
#include<cstring>
int max = 5000 ;
void display( int arr[ ] ) {
int ctr = 0 ;
for ( int i= 0 ; i< max; i++ ) {
if ( ! ctr && arr[ i] ) ctr = 1 ;
if ( ctr)
std:: cout << arr[ i] ;
}
}
void factorial( int arr[ ] , int n) {
if ( ! n) return ;
int carry = 0 ;
for ( int i= max- 1 ; i>= 0 ; -- i) {
arr[ i] = ( arr[ i] * n) + carry;
carry = arr[ i] / 10 ;
arr[ i] % = 10 ;
}
factorial( arr,n- 1 ) ;
}
int main( ) {
int * arr = new int [ max] ;
std:: memset ( arr,0 ,max* sizeof ( int ) ) ;
arr[ max- 1 ] = 1 ;
int num;
std:: cout << "Enter the number: " ;
std:: cin >> num;
std:: cout << "factorial of " << num<< " is :\n " ;
factorial( arr,num) ;
display( arr) ;
delete [ ] arr;
return 0 ;
}
I2luY2x1ZGU8aW9zdHJlYW0+CiNpbmNsdWRlPGNzdHJpbmc+CgppbnQgbWF4ID0gNTAwMDsKCnZvaWQgZGlzcGxheShpbnQgYXJyW10pewogICAgaW50IGN0ciA9IDA7CiAgICBmb3IgKGludCBpPTA7IGk8bWF4OyBpKyspewogICAgCWlmICghY3RyICYmIGFycltpXSkJCQljdHIgPSAxOwogICAgCWlmKGN0cikKICAgICAgICAgICAgc3RkOjpjb3V0PDxhcnJbaV07CiAgICB9Cn0KCgp2b2lkIGZhY3RvcmlhbChpbnQgYXJyW10sIGludCBuKXsKICAgIGlmICghbikgcmV0dXJuOwogICAgaW50IGNhcnJ5ID0gMDsKICAgIGZvciAoaW50IGk9bWF4LTE7IGk+PTA7IC0taSl7CiAgICAgICAgYXJyW2ldID0gKGFycltpXSAqIG4pICsgY2Fycnk7CiAgICAgICAgY2FycnkgPSBhcnJbaV0vMTA7CiAgICAgICAgYXJyW2ldICU9IDEwOwogICAgfQogICAgZmFjdG9yaWFsKGFycixuLTEpOwp9CgppbnQgbWFpbigpewogICAgaW50ICphcnIgPSBuZXcgaW50W21heF07CiAgICBzdGQ6Om1lbXNldChhcnIsMCxtYXgqc2l6ZW9mKGludCkpOwogICAgYXJyW21heC0xXSA9IDE7CiAgICBpbnQgbnVtOwogICAgc3RkOjpjb3V0PDwiRW50ZXIgdGhlIG51bWJlcjogIjsKICAgIHN0ZDo6Y2luPj5udW07CiAgICBzdGQ6OmNvdXQ8PCJmYWN0b3JpYWwgb2YgIjw8bnVtPDwiIGlzIDpcbiI7CiAgICBmYWN0b3JpYWwoYXJyLG51bSk7CiAgICBkaXNwbGF5KGFycik7CiAgICBkZWxldGVbXSBhcnI7CiAgICByZXR1cm4gMDsKfQo=