Beregn faktor i Java

1. Oversigt

Givet et ikke-negativt heltal n, factorial er produktet af alle positive heltal mindre end eller lig med n.

I denne hurtige vejledning undersøger vi forskellige måder at beregne faktor for et givet nummer på Java.

2. Faktor for tal op til 20

2.1. Faktor ved hjælp af en til Sløjfe

Lad os se en grundlæggende faktoralgoritme ved hjælp af en til løkke:

public long factorialUsingForLoop (int n) {long fact = 1; for (int i = 2; i <= n; i ++) {fact = fact * i; } returnere fakta; }

Ovenstående løsning fungerer bøde for tal op til 20. Men hvis vi prøver noget større end 20, vil det mislykkes fordi resultaterne ville være for store til at passe ind i en langforårsager et overløb.

Lad os se et par mere og bemærke, at hver af dem disse fungerer kun for små tal.

2.2. Faktor ved hjælp af Java 8 Streams

Vi kan også bruge Java 8 Strøm API til at beregne fakta over ganske let:

public long factorialUsingStreams (int n) {return LongStream.rangeClosed (1, n) .reduce (1, (long x, long y) -> x * y); }

I dette program bruger vi først LongStream for at gentage tallene mellem 1 og n. Vi brugte derefter reducere(), der bruger en identitetsværdi og akkumulatorfunktion til reduktionstrinnet.

2.3. Faktor ved hjælp af rekursion

Og lad os se et andet eksempel på et faktorprogram, denne gang ved hjælp af rekursion:

public long factorialUsingRecursion (int n) {if (n <= 2) {return n; } returner n * factorialUsingRecursion (n - 1); }

2.4. Faktor ved hjælp af Apache Commons Math

Apache Commons Math har en CombinatoricsUtils klasse med en statisk Faktor metode, som vi kan bruge til at beregne faktoriet.

For at inkludere Apache Commons Math, tilføjer vi commons-math3 afhængighed af vores pom:

 org.apache.commons commons-math3 3.6.1 

Lad os se et eksempel ved hjælp af CombinatoricsUtils klasse:

public long factorialUsingApacheCommons (int n) {return CombinatoricsUtils.factorial (n); }

Bemærk, at dens returtype er lang, ligesom vores hjemmelavede løsninger.

Det betyder her, at hvis den beregnede værdi overstiger Lang.MAX_VALUE, a MathArithmeticException kastes.

For at blive større, vi får brug for en anden returtype.

3. Faktor for tal større end 20

3.1. Faktorisk brug BigInteger

Som tidligere omtalt, har lang datatype kan kun bruges til fabriksbilleder til n <= 20.

For større værdier på n, vi kan bruge BigInteger klasse fra java.math pakke, som kan holde værdier op til 2 ^ Heltal.MAX_VALUE:

offentlig BigInteger factorialHavingLargeResult (int n) {BigInteger result = BigInteger.ONE; for (int i = 2; i <= n; i ++) resultat = result.multiply (BigInteger.valueOf (i)); returresultat }

3.2. Faktor ved hjælp af Guava

Googles Guava-bibliotek giver også en hjælpemetode til beregning af fabriksbilleder til større antal.

For at inkludere biblioteket kan vi tilføje dets guava afhængighed af vores pom:

 com.google.guava guava 25.1-jre 

Nu kan vi bruge det statiske Faktor metode fra BigIntegerMath klasse til at beregne faktoren for et givet tal:

offentlig BigInteger factorialUsingGuava (int n) {return BigIntegerMath.factorial (n); }

4. Konklusion

I denne artikel så vi et par måder at beregne fakturaer på ved hjælp af core Java samt et par eksterne biblioteker.

Vi så først løsninger ved hjælp af lang datatype til beregning af fakturaer af tal op til 20. Derefter så vi et par måder at bruge BigInteger for tal større end 20.

Koden præsenteret i denne artikel er tilgængelig på Github.


$config[zx-auto] not found$config[zx-overlay] not found