@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>>