Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
K
kurs_java_alx_20240321
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Patryk Czarnik
kurs_java_alx_20240321
Commits
143504cc
Commit
143504cc
authored
Apr 09, 2024
by
Patryk Czarnik
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
silnia - różne wersje
parent
6bfc67b3
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
72 additions
and
0 deletions
+72
-0
Silnia.java
src/p09_funkcje/Silnia.java
+72
-0
No files found.
src/p09_funkcje/Silnia.java
0 → 100644
View file @
143504cc
package
p09_funkcje
;
import
java.math.BigInteger
;
import
java.util.Scanner
;
import
java.util.stream.LongStream
;
public
class
Silnia
{
// silnia to jest iloczyn kolejnych liczb naturalnych od 1 do n włącznie
// np. 5! = silnia(5) = 1*2*3*4*5 = 120
// silnia(0) = 1, silnia(1) = 1...
static
int
silnia
(
int
n
)
{
int
iloczyn
=
1
;
for
(
int
i
=
1
;
i
<=
n
;
i
++)
{
iloczyn
=
iloczyn
*
i
;
}
return
iloczyn
;
}
// wersja dająca wynik typu long - działa do silnia(20)
static
long
silniaLong
(
int
n
)
{
long
iloczyn
=
1
;
for
(
int
i
=
2
;
i
<=
n
;
i
++)
{
iloczyn
*=
i
;
}
return
iloczyn
;
}
static
BigInteger
silniaBig
(
int
n
)
{
BigInteger
iloczyn
=
BigInteger
.
ONE
;
for
(
int
i
=
1
;
i
<=
n
;
i
++)
{
iloczyn
=
iloczyn
.
multiply
(
BigInteger
.
valueOf
(
i
));
}
return
iloczyn
;
}
// wersja z rekurencją - czyli funkcja wywołuje samą siebie
static
long
silniaRek
(
int
n
)
{
if
(
n
<=
1
)
return
1
;
return
n
*
silniaRek
(
n
-
1
);
}
// wersje w stylu "funkcyjnym" wykorzystujące strumienie
// tworzymy ciąg liczb od 1 do n włącznie i je wszystkie "przez siebie mnożymy"
static
long
silniaFun
(
int
n
)
{
return
LongStream
.
rangeClosed
(
1
,
n
).
reduce
(
1
,
(
x
,
y
)
->
x
*
y
);
}
static
BigInteger
silniaBigFun
(
int
n
)
{
return
LongStream
.
rangeClosed
(
1
,
n
)
.
mapToObj
(
BigInteger:
:
valueOf
)
.
reduce
(
BigInteger
.
ONE
,
BigInteger:
:
multiply
);
}
public
static
void
main
(
String
[]
args
)
{
Scanner
scanner
=
new
Scanner
(
System
.
in
);
System
.
out
.
println
(
"Podawaj liczby, zakończ wpisując -1"
);
while
(
true
)
{
System
.
out
.
print
(
"liczba: "
);
int
n
=
scanner
.
nextInt
();
if
(
n
<
0
)
break
;
System
.
out
.
println
(
"wersja int : "
+
n
+
"! = "
+
silnia
(
n
));
System
.
out
.
println
(
"wersja long: "
+
n
+
"! = "
+
silniaLong
(
n
));
System
.
out
.
println
(
"wersja rek : "
+
n
+
"! = "
+
silniaRek
(
n
));
System
.
out
.
println
(
"wersja fun : "
+
n
+
"! = "
+
silniaFun
(
n
));
System
.
out
.
println
(
"wersja big: "
+
silniaBig
(
n
));
System
.
out
.
println
(
"wersja bigfun: "
+
silniaBig
(
n
));
System
.
out
.
println
();
}
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment