@Rahul: Given that 100! < 100^100 = 10^200, we know that 100! has less
than 200 digits. Assuming 32-bit integers, we might choose to store
anywhere from 1 to 7 digits in an integer, realizing that we have to
multiply the integer by a number up to 100 and still want the result
to be less than 2^31. I'll use 5 digits in an integer. Then the
computation can look something like this, assuming that you have
already read n, the number whose factorial you want:

    int a[40], i, j, l, t;
    a[0] = 1; // rightmost "digit" of number = 0!
    l = 1;    // the active number of elements of a[] used.
    for( i = 2 ; i < n ; ++i )
    {
        t = 0; // the carry into the next product
        for( j = 0 ; j < l ; ++j )
        {
            t += i * a[j];    // multiply digit by i and add carry
            a[j] = t % 10000; // extract 5 digits
            t = p / 100000;   // calculate next carry
        }
        if( t > 0 ) // does the number need to add a digit?
            a[l++] = t;
    }
    printf("%i",a[l-1]);
    for( i = l-2 ; i >= 0 ; --i )
        printf("%.5i",a[i]);
    printf("\n");

Dave

On Feb 4, 10:19 am, Rahul Verma <rahulverma....@gmail.com> wrote:
> Hi Group,
>
> Let me help to solve this problem of SPOJhttps://www.spoj.pl/problems/FCTRL2/
>
> The approach to solve the problem is very easy and I'm confused that
> how to store such a large no. like 100! in a variable using C++
> Language.
>
> Thanx & Regards,
> Rahul Verma

-- 
You received this message because you are subscribed to the Google Groups 
"Algorithm Geeks" group.
To post to this group, send email to algogeeks@googlegroups.com.
To unsubscribe from this group, send email to 
algogeeks+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/algogeeks?hl=en.

Reply via email to