如题。用数组来存放中间数据的。谢谢

解决方案 »

  1.   


    import java.math.BigInteger;
    public class Test{
    public static void main(String args[]){
    System.out.println(factor(BigInteger.valueOf(2008)));

    }
    public static BigInteger factor(BigInteger value){
    if(value.compareTo(BigInteger.valueOf(0)) == 0){
    return BigInteger.valueOf(1);
    }else{
    BigInteger nSub = value.subtract(BigInteger.valueOf(1));
    return factor(nSub).multiply(value);
    }
    }

    }
      

  2.   

     不能用BigInteger,老师叫我们用数组来实现int[] a=new int[10000]
      

  3.   

    现在的关键是:如果你的阶乘到了一定程度:也就是说:超过了long的范围,你就不能用它来做乘法了。你该如何去做乘法??????????????
    储存倒不是问题,你可以将那个数的每一位作为数组的一个元素来存储。用的时候再重新组装。
      

  4.   

    说下思想,
    2008!=2008*2007*.....*1
    两边取对数
    lg2008!=lg2008+lg2007+...+lg1
    右边的先计算出来,应该比较快,
    然后2008!=10^右边的结果,
    lg函数在java.math里面应该有地。
    楼主如果有这照片这漂亮
      

  5.   

    lg2008!=lg2008+lg2007+...+lg1 
    右边的先计算出来,应该比较快, 
    然后2008!=10^右边的结果, 
    ————————————————————
    不错,学习了
      

  6.   

    是啊,还是dreamhyz 抓住了问题要害。呵呵。都帮我解决下吧,谢谢拉--!
      

  7.   

    这是我的思路,帮我看下。刚编的
            for(int i=1;i<=10000;i++)
           a[1]=1;
           for(int i=1;i<=2008;i++)
           {
             for(int j=1;j<=10000;j++)
               a[j]=a[j]*i;
           }
           for(int i=1;i<=10000;i++)
           {
               a[j+1]=a[j+1]+a[j]/2;
               a[j]=a[j]%2;
           }
      

  8.   

    少了点东西,是这样的哦!!
            int[] a=new int[10000];
            for(int i=1;i<=10000;i++)
           a[1]=1;
           for(int i=1;i<=2008;i++)
           {
             for(int j=1;j<=10000;j++)
               a[j]=a[j]*i;
           }
           for(int i=1;i<=10000;i++)
           {
               a[j+1]=a[j+1]+a[j]/2;
               a[j]=a[j]%2;
           }
      

  9.   

    参考众多意见写了一个,楼主试试看,你也可以用我写的这个和你写的那个对比看看结果是否一致class Factorial { private int originalNumber; public Factorial(int aiNumber) {
    originalNumber = aiNumber;
    } public void getFactorial() {
    int len = lenOf();
    int[] result = new int[len];
    for (int i = 0; i < result.length; i++)
    result[i] = 0;
    result[len - 1] = 1;
    for (int i = 2; i <= originalNumber; i++) {
    int carry = 0;
    for (int j = len - 1; j >= 0; j--) {
    int temp = i * result[j] + carry;
    result[j] = temp % 10;
    carry = temp / 10;
    }
    } int j;
    for (j = 0; j < len; j++) {
    if (result[j] == 0)
    continue;
    else
    break;
    }
    for (; j < len; j++) {
    System.out.print(result[j]);
    }
    } private int lenOf() {
    double sum = 0;
    for (int i = 1; i < originalNumber; i++) {
    sum += Math.log10(i);
    }
    return (int) (sum) + 2;
    } /**
     * @param args
     */
    public static void main(String[] args) {
    Factorial fc = new Factorial(2008);
    fc.getFactorial();
    }}
      

  10.   

    是否可以使用StringBuffer才存这个数呢
      

  11.   


    public static void cal(){
    int LENGTH =10000;
    int fac[] = new int[LENGTH];
    int add[] = new int[LENGTH];

    int j=0;
    int k=0;
    for (int i = 0; i < fac.length; i++) {
    fac[i]=add[i]=0;
    }
    fac[0]=1;

    for (int i = 1; i <= 10; i++) {
    j=0;
    while(j<LENGTH){
    fac[j] *= i;
    j++;
    }
    j=0;
    while(j<LENGTH){
    if(fac[j]/10 > 0){
    add[j] += fac[j]/10;
    fac[j]  = fac[j]%10;
    }
    if(add[j]>0){
    fac[j+1] +=  add[j];
    add[j]=0;
    }
    j++;
    }


    }
    for (int i = fac.length-1; i >=0 ; i--) {
    System.out.print(fac[i]);
    }

    }
      

  12.   

    把for (int i = 1; i <= 10; i++) 10 改为 2008 。
      

  13.   

    之是求2008的阶乘哪有这么麻烦啊。
    int sum = 1;
    for(int i = 1;i<=2008;i++)
    {
        sum = sum * i;
    }
    这样就可以了阿。不懂。难道还有什么别的要求吗
      

  14.   


    public class BignumberP {
    private static final int TOTAL_COUNT = 2008; public static void main(String[] args) {
    long beginTime = System.currentTimeMillis();
    String resulr = "1";
    for (int i = 1; i < TOTAL_COUNT; i ++){
    resulr = bignumMult(""+i,resulr);
    }
    System.out.println(TOTAL_COUNT + "! = " + resulr);
    long endTime = System.currentTimeMillis();
    System.out.println("Total Time:" + (endTime - beginTime) + "毫秒!");
    } public static String bignumMult(String num1, String num2) {
    int[] b1 = fromStr2IntArray(num1);
    if (b1 == null || b1.length == 0) {
    return null;
    }
    int[] b2 = fromStr2IntArray(num2);
    if (b2 == null || b2.length == 0) {
    return null;
    }
    // outBytes的最大长度不会超过b1.length+b2.length+1
    int[] outBytes = new int[b1.length + b2.length + 1]; for (int i = 0; i < b1.length; i++) {
    for (int j = 0; j < b2.length; j++) {
    int index = i + j; // 暂时不进位
    outBytes[index] = outBytes[index] + b1[i] * b2[j];
    }
    }
    for (int i = 0; i < outBytes.length; i++) {
    int r = outBytes[i];
    if (r >= 10) {
    outBytes[i] = r % 10;
    outBytes[i + 1] = r / 10 + outBytes[i + 1];
    }
    } StringBuilder sb = new StringBuilder("");
    int begin = -1;
    for (int i = outBytes.length - 1; i >= 0; i--) {
    if (outBytes[i] != 0) {
    begin = i;
    break;
    }
    }
    if (begin == -1) {
    return "0";
    }
    for (int i = begin; i >= 0; i--) {
    sb.append(outBytes[i]);
    } return sb.toString();
    } private static int[] fromStr2IntArray(String src) {
    if (src == null || src.trim().equals("")) {
    return null;
    }
    int len = src.length();
    int[] rt = new int[len];
    for (int i = 0; i < len; i++) {
    int tmp = src.charAt(len - 1 - i) - 48;
    if (tmp < 0 || tmp >= 10) {
    return null;
    }
    rt[i] = tmp;
    } return rt;
    }
    }
      

  15.   

    测试结果:2008! = 43046025187604931301073495306021606919706444365300504437700726938653476658540482895682023255731671008083253191134701531977327216262277734910301434073329657780176301162545225328061928920600009311905398639804126820396042450460066202697109907775276623968872853518354346016759166458978964531046772922079680334268349395400553907217843631670817062494745980159863699220055641618598527015369240922663513465449205721247877490866588987319843422033263068274836269183109480555389276190778038346967829969281182891390688896155908109741132615117268473730816500283359164264798601830326973866516776844628492169888293607239521260874661077748006501467554897266946929770167198202236168539094714436855125596965348850278428419408219121959065193321094260460012675282320096826009233318736492824372516701872916530191875274006751331906949469628695531029803522907150511237974426186839709893928853134757666263702066048826067502979089490242203757191931995294333171004695915352384474640644871822174241620572300156183558707078250717736961028156366959859921677655296330168740251591833351738043564377433284560158900338387796347112169428063480631538972184250753425370550017347776082214497306198063123186364841851403471408935730920459851486382788780998473732852005808994277131462002778650116911176327529356272603080102462324046604967312994263057368736624383919299458455699953933902352832256995941578134414743773382025255763658469026381866173288278447517255899658106552083051273359946737694651653754212906940384507355916630452196467129515987238021880606693829465264036899907307073437748560421341264116300230386978307277778110708808733561649284732562121195906834971751633631368677060936633119693654851223848615055082338939110035147213318136450234671212414029203616097230229945589841558040806845598058569001772383673629931716052342324341754195802753961257749189489037546944046112698324226187886768203898532477568362512929472764193781917650659658067589854223239462278187257059803948080557352654440583879422632096576531138731341885525844991796066351797621828730134725090944592790746734838522090756233976604544592665981142091966145661214078994176588123329399477109684347998836680683905444196796967903868455537458498586039586192714740410794873963813087940474907257329609557753515220359377337931228007810105449664070738053828013106422871266860404152807998523787092304682888264491432008554538300105320931903925794071312499192163207973053010023657157473954259657147335725251796830290146559452482096881004043699938653430179325321654494642446065202143276556976131126842569675581676839245919623228558247939229608790965820538400773470442008795867418950422510595413786972491033509552770587574679332977203196498537188583431130439956129081170636512351452788148050467473426861861103423636253521296569875953548170759645070796206682201768579959521236079495302391872041609223373410350948157764821209719094151213454012939429195884071063418582607938136555832992865478019751326416465650511040663018822058464400624606019400679681798288602527431886049034667225741015869049545764966156382561886172391332447947496644586519007980781117082080832021553420905696111049082685844767480840155238277177489208624726067851558869384426174647894231769867840866104268905410839849955133611554998133231555205769515722036852728601400019910791908069304128485748623142491012155998505368257654300095344895483194357030280508241289209799818268192667474541677114456558535733451965986362511131759065483735917201820897713058943975031526862863020430238708330397037864688223445598303312445818485142622513047532003550144078124831069189543160890852663608664354949670516059153261874952616358879968885489548737646622245041726345296829806734518932623185858874882546597909273541916936731698992217560436798479067580757234793907609041523948571053586384066337965273797847228760266551673618545481050809715004563792359718325107000073822179462358731590133936457251061372964290031222109669342316112331026823503833605565706502583832321627244774932094320883639781575056681178593042644061088809543333197948184330206660117244042299054620498800979659047820907097057396078391671915038011463035486300770242567590029510130760822673560320175464663608120374850039936697908449562312313298509745332308767805630772303120987386658714052978743556161615121774189061709715577455710161127856156620873018528092261285229010322165874979537115540211581972921040583292511405755187844636520805885692646019073556593713213213966061460742034317424610461043611879519537027747897267860975084431182515818098260712653832833939941816573348964437662757953006243481263581284433181109714025483815515348964930744099459782257197557903674741764225044035484415670530754237680782608356816059915546837787342603034767450416784886939340579307297735893890161000774744097698174116456513007650344673840749164573609437889867638252075539415406715721915296914731453346589790878646350370973001832566070316839486662669948238129199687090116537463734411569263617697006515197071129488492505811526009419472254401552612450606182107762414856252135950753135618729683159942855997294281110315350168393614610318114744974613446518541468264872922131535963094889967606125896648382597476027556006107102066564749867715245556119208056973521319244885469993060840556037400970969657521430843028156368845211529581718876773095256883200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    Total Time:328毫秒!
    这个算法可能还可以优化,结果效率可以继续提高,谁有兴趣继续加油!测试环境:T61 AP9 + WinXP SP2另外测了一个5008!,结果数据就不写出来了,时间是
    Total Time:3156毫秒!最大可以运算到多少我没测试,谁有兴趣继续~郁闷,每次提交都说我有非法字符~~
      

  16.   

    靠,上面少乘一个2008
    补发结果
    2008! = 86436418576710702052555578574491386694770540285523412910903059692816181130349289654529502697509195384231172407798480676210473050254653691699885279619245952822594012734390812458748353272564818698306040468726686655355253240523812935015796694812755460929496689864855526801652406249629760778341920027535998111210845585964312245693430012395000661489449928161006308033871728370145842246861435772708335038622005088265738001660110686538245591442792241095871228519683836955221666591082301000711402578316615245912503303481063484360194291155475095251479532568985201843715592475296563523965687904014012277135693563336958691836319444117997054946850233712029434978495733990090226426502186589205092198706420491359084266171703996893802908188757275003705451966898754426626540504022877591340013537360816392625285550205556674469154535014420626307845473997558226565852647783174137467009137094593393857513748626042743545982011696406345144441399446551021007377429398027588025078414902618925877174109178713616585883813127441215817744537984855398722728731835030978830425196401370289991477269886035396799071879482695065001236211551469108130256145975512878144064434834334373086710590845710751358220602437618170589142947688283381784656639872244935255566827664460508479975701579529434757642065678947395386984845744346685582774364492480219196423141762909953312579045507499275924487172047850688893904805496951106713573426205804974787275962863122614649846513477956582766956906773049290860520738459517136292090770680593948010505996068102373947936258241209566250186095013872603462999109326053258345530862617052441013778446303287936991791763742984739361380924623277280331788303538360759304344858941257488019030605336589732950575604342817992071219794527370640861123238301730744401848545940145960901606555558946416648902885833103387278242425171929954205560372493987394263644594298235046185276630553428253214957271925962381310501114090642524593399720427280264840254600012176086327745759164130116692429880645249925674526572534506135896743526501234409624632090110527982616742323819443555752358238517825021925542073290133320668020487717870620306588951645434150036246170781664054813282131947168311550967858719216665160767489074971198744876106919336680584473613772717855991969058562481629694565905839682691742925454042012086650317697125503855691538838461035764481347803239635098795473177512906611484431263082994495195498377863721609890444127503572207700153391551850136305608035222614291380584050537056119749476816087800085245882225242031698925903699326408071302699879908568007093205806603442944961861973054452259367641108753128647553662101777252448401275590884240761995287181963339849956100618224018569062674675529709923431907194990638116801717198601285338686641138617095674661597070763512310914724726885367302158783017861151308558718642047626567202879059551320533807984703900791760989115941055636615657982373825335214695344513876739778204112649673879863660663444263026226169651341794693396516454208886956564801050963513875083227186461611789287959865051487896052042016184267434161795555478573262329730168025408483100818310699279269178637790986558033176293101527031718460572398330918449944245930209723927758692971617393894624459137371962064966418709908292002436251528962853185187569850000279031611239980870151403162689999383235270121952409244998779461369834591452550130254268916803260548508733278035082530876288879687645828769539752771547700615922352572203491341721741256362607822359501863305940628945023919326327437252032293952678761393051391203518166386006199444263128689308874660786932602667068832148526198024738938396246779749844904853648630977522063013865194417468043786501356034251922914016707357204620764153568601821272169208957251576372861357091345967702160527466166478955380088730675601459205206634269786077235350615235760626039325950025907729164095058314396814856148234936360416333032988944406160131236912294382693996216039370753560701861595697879975938657188335301827507508063645396334348681402713815806614829629274666329563013061479954135054973515426036936501677961592367155368024381450891251325410477205396327017775256491946647075720779256342567731928509122912333044525105712698880192889400166721123125103407568627276005753706590784666942672410697818381317060772523164522571635913108879531066003544735162494713021204409260660739852726909076958910528004744856601625449491251362902756417192030133778218470833206299701640176132133643851413170004909388617805775572654075230351717777713864837969537814491762741307511008896330551403167679284720590826817969636536910377271219141827668305763171501554820721580934151715242772452696270578881462563888423252706666425754509263011477580486648310418050276983946893813040436904052974195883249053853674931443289555686148177933625844678119361892105072224322463807751282854217610167683146136685169605916204780758319952300084321871544913787679792669196213689218641256062163432971676954007227178698431081344335589082515718828012892951669544226914300286838317645800817213672386929031354288989112296322409203785165254842566916469513223138134378137518774407909023800609231268275864827640124213894539054953100800469952255731863332460263060949662017734372213076687369778402830809043730023746066167836523101149707072303033132800537988641184751400091504560375275821465600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    Total Time:344毫秒!
      

  17.   

    关于阶乘和大数乘法的各种算法可以到我的blog,提供了几种常见算法
    http://blog.csdn.net/daniel_kaka/archive/2008/02/03/2080599.aspx