Tässä ohjelmassa opit etsimään luvun faktorin käyttämällä Java-silmukkaa ja taas -silmukkaa.
Tämän esimerkin ymmärtämiseksi sinulla on oltava tieto seuraavista Java-ohjelmointiaiheista:
- Java silmukalle
- Java taas ja tee … samalla kun silmukka
Positiivisen luvun n kerroin saadaan:
kerroin n (n!) = 1 * 2 * 3 * 4 *… * n
Esimerkki 1: Etsi luvun kerroin käyttämällä silmukkaa
public class Factorial ( public static void main(String() args) ( int num = 10; long factorial = 1; for(int i = 1; i <= num; ++i) ( // factorial = factorial * i; factorial *= i; ) System.out.printf("Factorial of %d = %d", num, factorial); ) )
Tuotos
Kerroin 10 = 3628800
Tässä ohjelmassa olemme käyttäneet silmukkaa silmukoiden läpi kaikki numerot välillä 1 ja annettu numero num (10), ja jokaisen luvun tulo numeroon saakka on tallennettu muuttujaan.
Olemme käyttäneet pitkään int-sijasta tallentaaksemme suuria faktorial-tuloksia. Se ei kuitenkaan ole vielä tarpeeksi suuri tallentamaan suurempien numeroiden (esimerkiksi 100) arvoa.
Tuloksiin, joita ei voida tallentaa pitkään muuttujaan, käytämme kirjastossa BigInteger
ilmoitettua muuttujaa java.math
.
Esimerkki 2: Etsi luvun kerroin BigIntegerin avulla
import java.math.BigInteger; public class Factorial ( public static void main(String() args) ( int num = 30; BigInteger factorial = BigInteger.ONE; for(int i = 1; i <= num; ++i) ( // factorial = factorial * i; factorial = factorial.multiply(BigInteger.valueOf(i)); ) System.out.printf("Factorial of %d = %d", num, factorial); ) )
Tuotos
Kerroin 30 = 265252859812191058636308480000000
Täällä sen sijaan long
käytämme BigInteger
muuttujaa kertoma.
Koska *
sitä ei voida käyttää BigInteger
, käytämme sen sijaan multiply()
tuotteelle. Myös numero tulisi heittää kohtaan BigInteger
kertolasku.
Samoin voimme käyttää jonkin aikaa silmukkaa tämän ongelman ratkaisemiseen.
Esimerkki 3: Etsi luvun kerroin while-silmukan avulla
public class Factorial ( public static void main(String() args) ( int num = 5, i = 1; long factorial = 1; while(i <= num) ( factorial *= i; i++; ) System.out.printf("Factorial of %d = %d", num, factorial); ) )
Tuotos
Kerroin 5 = 120
Yllä olevassa ohjelmassa, toisin kuin for -silmukalle, meidän on kasvatettava i: n arvoa silmukan rungossa.
Vaikka molemmat ohjelmat ovat teknisesti oikein, on parempi käyttää silmukkaa tässä tapauksessa. Se johtuu siitä, että iteroinnin määrä (upto num) on tiedossa.
Käy tällä sivulla oppiaksesi etsimään luvun faktori rekursiota käyttämällä.