@Rajesh gave a simple elegant solution.

A look at a Linux calculator : you can even calculate 999999! =
8.854887824e+5584950 ....in few seconds. I just looked at the code(its open
source right!), which is not so easy to understand in few minutes.

Here is the some part of code I extracted from source files:

/* Size of the multiple precision values */
#define MP_SIZE 1000

/* Base for numbers */
#define MP_BASE 10000

/* Object for a high precision floating point number representation
 *
 * x = sign * (MP_BASE^(exponent-1) + MP_BASE^(exponent-2) + ...)
 */
typedef struct
{
   /* Sign (+1, -1) or 0 for the value zero */
   int sign; //, im_sign;

   /* Exponent (to base MP_BASE) */
   int exponent; //, im_exponent;

   /* Normalized fraction */
   int fraction[MP_SIZE]; //, im_fraction[MP_SIZE];
} MPNumber;


void mp_factorial(const MPNumber *x, MPNumber *z)
{
    int i, value;

    /* 0! == 1 */
    if (mp_is_zero(x)) {
        mp_set_from_integer(1, z);
        return;
    }
    if (!mp_is_natural(x)) {
        /* Translators: Error displayed when attempted take the factorial of
a fractional number */
        mperr(_("Factorial is only defined for natural numbers"));
        mp_set_from_integer(0, z);
        return;
    }

    /* Convert to integer - if couldn't be converted then the factorial
would be too big anyway */
    value = mp_cast_to_int(x);
    mp_set_from_mp(x, z);
    for (i = 2; i < value; i++)
        mp_multiply_integer(z, i, z);
}

mp_multiply_integer(z, i, z) subroutine is too big too put in here, too see
its code visit:  http://live.gnome.org/Gcalctool
<http://live.gnome.org/Gcalctool>
On Mon, May 3, 2010 at 2:34 PM, Anil C R <cr.a...@gmail.com> wrote:

> @Jitendra
> but that's no fun [?]
>
> -----
> Anil
>
>
>
> On Mon, May 3, 2010 at 5:12 PM, vignesh radhakrishnan <
> rvignesh1...@gmail.com> wrote:
>
>> @siddharth and prasoon either design a very long integer library yourself,
>> or use gmp library in cpp or BigInteger Class in java.
>>
>> Regards,
>> vignesh
>>
>> On 3 May 2010 09:46, siddharth srivastava <akssps...@gmail.com> wrote:
>>
>>> But is there any way to accomplish this without an array ? Even for 100!.
>>>
>>>
>>> On 2 May 2010 06:15, Prasoon Mishra <prasoonbluel...@gmail.com> wrote:
>>>
>>>> I think challenge here is not the Execution time, but the storage. 300 !
>>>> or 400! should generally go beyond the storage capabilities of long long
>>>> ints in cpp.
>>>> @ Rohit Saraf: Hence, I don't know if even tail recursion will
>>>> ultimately be able to store the output.
>>>> I think Rajesh Patidar's answer fits the bill well, in terms of storage.
>>>>
>>>>
>>>> On Sun, May 2, 2010 at 2:23 PM, vignesh radhakrishnan <
>>>> rvignesh1...@gmail.com> wrote:
>>>>
>>>>> I agree with abhijith. But given some very large x for which i would
>>>>> have to find factorial.
>>>>> I would either
>>>>> (i) use gmp in cpp or BigInteger or java if its not a lab exercise or
>>>>> an interview
>>>>> (ii) use simple brute multiplication algorithm.
>>>>> The second approach requires
>>>>>          (a) The no. of digits in n! for making storage available
>>>>>          (b) The calculation itself which I would brute force
>>>>>
>>>>> References:
>>>>>
>>>>> http://inder-gnu.blogspot.com/2009/08/find-number-of-digits-in-factorial-of.html
>>>>>
>>>>> http://stackoverflow.com/questions/1113167/can-one-know-how-large-a-factorial-would-be-before-calculating-it
>>>>> http://delphiforfun.org/programs/big_factorials.htm
>>>>>
>>>>>
>>>>>
>>>>> On 2 May 2010 13:59, Rohit Saraf <rohit.kumar.sa...@gmail.com> wrote:
>>>>>
>>>>>> google it... u will gt it
>>>>>>
>>>>>> i am on mobile... cannot explain now..
>>>>>>
>>>>>> On 5/2/10, divya jain <sweetdivya....@gmail.com> wrote:
>>>>>> > wat is tail recursion plz explan in detail
>>>>>> >
>>>>>> > On 2 May 2010 08:15, Rohit Saraf <rohit.kumar.sa...@gmail.com>
>>>>>> wrote:
>>>>>> >
>>>>>> >> @divya use tail recursion and rest should be fine..
>>>>>> >>
>>>>>> >> --
>>>>>> >> --------------------------------------------------
>>>>>> >> Rohit Saraf
>>>>>> >> Second Year Undergraduate,
>>>>>> >> Dept. of Computer Science and Engineering
>>>>>> >> IIT Bombay
>>>>>> >> http://www.cse.iitb.ac.in/~rohitfeb14<http://www.cse.iitb.ac.in/%7Erohitfeb14>
>>>>>> <http://www.cse.iitb.ac.in/%7Erohitfeb14>
>>>>>> >>
>>>>>> >> --
>>>>>> >> You received this message because you are subscribed to the Google
>>>>>> Groups
>>>>>> >> "Algorithm Geeks" group.
>>>>>> >> To post to this group, send email to algoge...@googlegroups.com.
>>>>>> >> To unsubscribe from this group, send email to
>>>>>> >> algogeeks+unsubscr...@googlegroups.com<algogeeks%2bunsubscr...@googlegroups.com>
>>>>>> <algogeeks%2bunsubscr...@googlegroups.com<algogeeks%252bunsubscr...@googlegroups.com>
>>>>>> >
>>>>>> >> .
>>>>>> >> For more options, visit this group at
>>>>>> >> http://groups.google.com/group/algogeeks?hl=en.
>>>>>> >>
>>>>>> >>
>>>>>> >
>>>>>> > --
>>>>>> > You received this message because you are subscribed to the Google
>>>>>> Groups
>>>>>> > "Algorithm Geeks" group.
>>>>>> > To post to this group, send email to algoge...@googlegroups.com.
>>>>>> > To unsubscribe from this group, send email to
>>>>>> > algogeeks+unsubscr...@googlegroups.com<algogeeks%2bunsubscr...@googlegroups.com>
>>>>>> .
>>>>>> > For more options, visit this group at
>>>>>> > http://groups.google.com/group/algogeeks?hl=en.
>>>>>> >
>>>>>> >
>>>>>>
>>>>>>
>>>>>> --
>>>>>> --------------------------------------------------
>>>>>> Rohit Saraf
>>>>>> Second Year Undergraduate,
>>>>>> Dept. of Computer Science and Engineering
>>>>>> IIT Bombay
>>>>>> http://www.cse.iitb.ac.in/~rohitfeb14<http://www.cse.iitb.ac.in/%7Erohitfeb14>
>>>>>>
>>>>>> --
>>>>>> You received this message because you are subscribed to the Google
>>>>>> Groups "Algorithm Geeks" group.
>>>>>> To post to this group, send email to algoge...@googlegroups.com.
>>>>>> To unsubscribe from this group, send email to
>>>>>> algogeeks+unsubscr...@googlegroups.com<algogeeks%2bunsubscr...@googlegroups.com>
>>>>>> .
>>>>>> For more options, visit this group at
>>>>>> http://groups.google.com/group/algogeeks?hl=en.
>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>> --
>>>>> There are two kinds of people. Those who care for others and The others
>>>>>
>>>>> --
>>>>> You received this message because you are subscribed to the Google
>>>>> Groups "Algorithm Geeks" group.
>>>>> To post to this group, send email to algoge...@googlegroups.com.
>>>>> To unsubscribe from this group, send email to
>>>>> algogeeks+unsubscr...@googlegroups.com<algogeeks%2bunsubscr...@googlegroups.com>
>>>>> .
>>>>> For more options, visit this group at
>>>>> http://groups.google.com/group/algogeeks?hl=en.
>>>>>
>>>>
>>>>  --
>>>> You received this message because you are subscribed to the Google
>>>> Groups "Algorithm Geeks" group.
>>>> To post to this group, send email to algoge...@googlegroups.com.
>>>> To unsubscribe from this group, send email to
>>>> algogeeks+unsubscr...@googlegroups.com<algogeeks%2bunsubscr...@googlegroups.com>
>>>> .
>>>> For more options, visit this group at
>>>> http://groups.google.com/group/algogeeks?hl=en.
>>>>
>>>
>>>
>>>
>>> --
>>> Siddharth Srivastava
>>>
>>> Human Knowledge is for all
>>>
>>> --
>>> You received this message because you are subscribed to the Google Groups
>>> "Algorithm Geeks" group.
>>> To post to this group, send email to algoge...@googlegroups.com.
>>> To unsubscribe from this group, send email to
>>> algogeeks+unsubscr...@googlegroups.com<algogeeks%2bunsubscr...@googlegroups.com>
>>> .
>>> For more options, visit this group at
>>> http://groups.google.com/group/algogeeks?hl=en.
>>>
>>
>>
>>
>> --
>> There are two kinds of people. Those who care for others and The others
>>
>> --
>> You received this message because you are subscribed to the Google Groups
>> "Algorithm Geeks" group.
>> To post to this group, send email to algoge...@googlegroups.com.
>> To unsubscribe from this group, send email to
>> algogeeks+unsubscr...@googlegroups.com<algogeeks%2bunsubscr...@googlegroups.com>
>> .
>> For more options, visit this group at
>> http://groups.google.com/group/algogeeks?hl=en.
>>
>
>  --
> You received this message because you are subscribed to the Google Groups
> "Algorithm Geeks" group.
> To post to this group, send email to algoge...@googlegroups.com.
> To unsubscribe from this group, send email to
> algogeeks+unsubscr...@googlegroups.com<algogeeks%2bunsubscr...@googlegroups.com>
> .
> For more options, visit this group at
> http://groups.google.com/group/algogeeks?hl=en.
>

-- 
You received this message because you are subscribed to the Google Groups 
"Algorithm Geeks" group.
To post to this group, send email to algoge...@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.

<<329.png>>

Reply via email to