W tym programie nauczysz się znajdować silnię liczby za pomocą pętli for i while w Kotlinie. Dowiesz się również, jak używać zakresów do rozwiązania tego problemu.
Silnia liczby dodatniej n jest wyrażona wzorem:
silnia n (n!) = 1 * 2 * 3 * 4 *… * n
Przykład 1: Znajdź silnię liczby za pomocą pętli for
fun main(args: Array) ( val num = 10 var factorial: Long = 1 for (i in 1… num) ( // factorial = factorial * i; factorial *= i.toLong() ) println("Factorial of $num = $factorial") )
Po uruchomieniu programu wynik będzie następujący:
Silnia 10 = 3628800
W tym programie użyliśmy pętli do przechodzenia przez wszystkie liczby od 1 do podanej liczby num (10), a iloczyn każdej liczby do liczby num jest przechowywany w zmiennej silni.
W przeciwieństwie do Javy, w Kotlinie można używać 1… num
operatorów range ( ) i in, aby przechodzić w pętli przez liczby od 1 do num.
Ponadto użyliśmy long zamiast int do przechowywania dużych wyników silni.
Jednak nadal nie jest wystarczająco duża, aby przechowywać wartość większych liczb (powiedzmy 100). W przypadku wyników, których nie można zapisać w długiej zmiennej, używamy BigInteger
zmiennej zadeklarowanej w java.math
bibliotece.
Oto odpowiednik kodu w języku Java: Program w języku Java do znajdowania silniowej liczby.
Przykład 2: Znajdź silnię liczby za pomocą BigInteger
import java.math.BigInteger fun main(args: Array) ( val num = 30 var factorial = BigInteger.ONE for (i in 1… num) ( // factorial = factorial * i; factorial = factorial.multiply(BigInteger.valueOf(num.toLong())) ) println("Factorial of $num = $factorial") )
Po uruchomieniu programu wynik będzie następujący:
Silnia 30 = 205891132094649000000000000000000000000000000
Tutaj zamiast long
używamy BigInteger
zmiennej silni.
Ponieważ *
nie można używać z BigInteger
, używamy zamiast multiply()
tego produktu. Do BigInteger
mnożenia należy rzutować również num .
Podobnie, do rozwiązania tego problemu możemy użyć pętli while.
Przykład 3: Znajdź silnię liczby za pomocą pętli while
fun main(args: Array) ( val num = 5 var i = 1 var factorial: Long = 1 while (i <= num) ( factorial *= i.toLong() i++ ) println("Factorial of $num = $factorial") )
Po uruchomieniu programu wynik będzie następujący:
Silnia 5 = 120
W powyższym programie, w przeciwieństwie do pętli for, musimy zwiększyć wartość i wewnątrz ciała pętli.
Chociaż oba programy są technicznie poprawne, w takim przypadku lepiej jest użyć pętli for. Dzieje się tak, ponieważ znana jest liczba iteracji (do liczby).
Odwiedź tę stronę, aby dowiedzieć się, jak znaleźć silnię liczby za pomocą rekurencji.