这里有四个关于计算阶乘的,难度依次提升,全部通过测试。
这应该是基本代码了,与之共勉。
这是利用简单的循环相乘制造的阶乘。
publicclassFactorial{ publicstaticintfactorial(intx){ if(x0){ thrownewIllegalArgumentException("xmustbe=0"); } intfact=1; for(inti=2;i=x;i++){ fact*=i; } returnfact; } publicstaticvoidmain(Stringargs[]){ System.out.print(factorial(10)); } }
这个是利用递归算法制成的。
publicclassfactorial2{ publicstaticintfactorial2(intx){ if(x0){ thrownewIllegalArgumentException("xmustbe=0"); } if(x=1){ return1; }else returnx*factorial2(x-1); } publicstaticvoidmain(Stringargs[]){ System.out.print(factorial2(10)); } }
这个是数组添加的方法制成的,可以计算更大的阶乘。
publicclassFactorial3{ staticlong[]table=newlong[21]; static{table[0]=1;} staticintlast=0; publicstaticlongfactorial(intx)throwsIllegalArgumentException{ if(x=table.length){ thrownewIllegalArgumentException("Overflow;xistoolarge."); } if(x=0){ thrownewIllegalArgumentException("xmustbenon-negative."); } while(lastx){ table[last+1]=table[last]*(last+1); last++; } returntable[x]; } publicstaticvoidmain(String[]args){ System.out.print(factorial(17)); } }
最后一个是利用BigInteger类制成的,这里可以用更大的更大的阶乘。
importjava.math.BigInteger; importjava.util.*; publicclassFactorial4{ protectedstaticArrayListtable=newArrayList(); static{table.add(BigInteger.valueOf(1));} publicstaticsynchronizedBigIntegerfactorial(intx){ for(intsize=table.size();size=x;size++){ BigIntegerlastfact=(BigInteger)table.
匹克淘宝旗舰店get(size-1); BigIntegernextfact=lastfact.multiply(BigInteger.valueOf(size)); table.add(nextfact); } return(BigInteger)table.get(x); } publicstaticvoidmain(String[]args){ System.out.print(factorial(17)); } }