Beregn faktor i Java

1. Oversikt

Gitt et ikke-negativt heltall n, faktori er produktet av alle positive heltall som er mindre enn eller lik n.

I denne raske opplæringen vil vi utforske forskjellige måter å beregne faktor for et gitt tall på Java.

2. Faktor for tall opp til 20

2.1. Faktor ved hjelp av en til Løkke

La oss se en grunnleggende faktoralgoritme ved hjelp av en til Løkke:

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

Ovennevnte løsning vil fungere fint for tall opp til 20. Men hvis vi prøver noe større enn 20, vil det mislykkes fordi resultatene ville være for store til å passe inn i en langforårsaker overløp.

La oss se noen flere, og merke oss at hver av dem disse fungerer bare for små tall.

2.2. Faktor ved bruk av Java 8 Streams

Vi kan også bruke Java 8 Strøm API for å beregne faktaark ganske enkelt:

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

I dette programmet bruker vi først LongStream for å gjenta tallene mellom 1 og n. Vi brukte deretter redusere(), som bruker en identitetsverdi og akkumulatorfunksjon for reduksjonstrinnet.

2.3. Faktor ved bruk av rekursjon

Og la oss se et annet eksempel på et faktorprogram, denne gangen ved hjelp av rekursjon:

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

2.4. Faktor ved bruk av Apache Commons Math

Apache Commons Math har en CombinatoricsUtils klasse med statisk fabrikk metoden som vi kan bruke til å beregne faktoriet.

For å inkludere Apache Commons Math, legger vi til commons-math3 avhengighet i vår pom:

 org.apache.commons commons-math3 3.6.1 

La oss se et eksempel med CombinatoricsUtils klasse:

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

Legg merke til at returtypen er lang, akkurat som våre hjemmelagde løsninger.

Det betyr her at hvis den beregnede verdien overstiger Lang.MAX_VALUE, a MathArithmeticException blir kastet.

For å bli større, vi trenger en annen returtype.

3. Faktor for antall større enn 20

3.1. Faktorisk bruk BigInteger

Som diskutert før, lang datatype kan bare brukes til fakta n <= 20.

For større verdier av n, vi kan bruke BigInteger klasse fra java.math pakke, som kan holde verdier opp til 2 ^ Heltall.MAX_VALUE:

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

3.2. Faktor ved bruk av Guava

Googles Guava-bibliotek gir også en verktøymetode for beregning av fakta for større antall.

For å inkludere biblioteket kan vi legge til det guava avhengighet til vår pom:

 com.google.guava guava 25.1-jre 

Nå kan vi bruke det statiske fabrikk metoden fra BigIntegerMath klasse for å beregne faktoren til et gitt tall:

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

4. Konklusjon

I denne artikkelen så vi noen måter å beregne faktaark ved hjelp av kjernen Java, så vel som et par eksterne biblioteker.

Vi så først løsninger ved hjelp av lang datatype for beregning av fakturaer av tall opp til 20. Så så vi et par måter å bruke BigInteger for tall større enn 20.

Koden presentert i denne artikkelen er tilgjengelig på Github.


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