@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 <[email protected]> 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 [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/algogeeks?hl=en.