TA的每日心情 | 开心 2021-3-12 23:18 |
---|
签到天数: 2 天 [LV.1]初来乍到
|
这里有四个关于计算阶乘的,难度依次提升,全部通过测试。
这应该是基本代码了,与之共勉。
这是利用简单的循环相乘制造的阶乘。
- public class Factorial {
- public static int factorial(int x) {
- if (x < 0) {
- throw new IllegalArgumentException("x must be>=0");
- }
- int fact = 1;
- for (int i = 2; i <= x; i++) {
- fact *= i;
- }
- return fact;
- }
- public static void main(String args[]) {
- System.out.print(factorial(10));
- }
- }
复制代码
这个是利用递归算法制成的。
- public class factorial2 {
- public static int factorial2(int x) {
- if (x < 0) {
- throw new IllegalArgumentException("x must be>=0");
- }
- if (x <= 1) {
- return 1;
- } else
- return x * factorial2(x - 1);
- }
- public static void main(String args[]) {
- System.out.print(factorial2(10));
- }
- }
-
复制代码
这个是数组添加的方法制成的,可以计算更大的阶乘。
- public class Factorial3 {
- static long[] table = new long[21];
- static {table[0] = 1; }
- static int last = 0;
- public static long factorial(int x) throws IllegalArgumentException {
- if (x >= table.length) {
- throw new IllegalArgumentException("Overflow; x is too large.");
- }
- if (x <= 0) {
- throw new IllegalArgumentException("x must be non-negative.");
- }
- while (last < x) {
- table[last + 1] = table[last] * (last + 1);
- last++;
- }
- return table[x];
- }
- public static void main(String[] args) {
-
- System.out.print(factorial(17));
- }
- }
复制代码 最后一个是利用BigInteger类制成的,这里可以用更大的更大的阶乘。
- import java.math.BigInteger;
- import java.util.*;
- public class Factorial4{
- protected static ArrayList table = new ArrayList();
- static{ table.add(BigInteger.valueOf(1));}
- public static synchronized BigInteger factorial(int x){
- for(int size=table.size();size<=x;size++){
- BigInteger lastfact= (BigInteger)table.get(size-1);
- BigInteger nextfact= lastfact.multiply(BigInteger.valueOf(size));
- table.add(nextfact);
- }
- return (BigInteger) table.get(x);
- }
- public static void main(String[] args) {
-
- System.out.print(factorial(17));
- }
- }
复制代码
源码下载:http://file.javaxxz.com/2014/11/5/000234281.zip |
|