CodeGym /ื‘ืœื•ื’ Java /Random-HE /ืชื•ื›ื ื™ืช Java ืขื‘ื•ืจ ืคืงื˜ื•ืจื™
John Squirrels
ืจึธืžึธื”
San Francisco

ืชื•ื›ื ื™ืช Java ืขื‘ื•ืจ ืคืงื˜ื•ืจื™

ืคื•ืจืกื ื‘ืงื‘ื•ืฆื”
ื”ื™ื•ื ื ื“ื‘ืจ ืขืœ ืคืงื˜ื•ืจื™ืืœื™ื™ื ื•ืขืœ ื”ื“ืจื›ื™ื ื”ื ืคื•ืฆื•ืช ื‘ื™ื•ืชืจ ืœืžืฆื•ื ืคืงื˜ื•ืจื™ืืœื™ื™ื. ื–ื•ื”ื™ ืื—ืช ื”ืคื•ื ืงืฆื™ื•ืช ื”ื‘ืกื™ืกื™ื•ืช ื‘ื™ื•ืชืจ ืฉืžืชื›ื ืช ืฆืจื™ืš ื’ื ืœื“ืขืช ื•ื’ื ืœื”ื™ื•ืช ืžืกื•ื’ืœ ืœืขื‘ื•ื“ ืื™ืชืŸ. ื•ื‘ื›ืŸ, ื‘ื•ืื• ื ืชื—ื™ืœ. ื”ืคืงื˜ื•ืจื™ืืœื™ ืฉืœ ื”ืžืกืคืจ n, ื”ืžืกื•ืžืŸ ื›-n!, ื”ื•ื ื”ืขืจืš ืฉืœ ื”ืžื›ืคืœื” (ื”ื›ืคืœื”) ืฉืœ ื›ืœ ื”ืžืกืคืจื™ื ื”ื˜ื‘ืขื™ื™ื ืž-1 ืขื“ n. ื›ืš ื–ื” ื ืจืื” (ื‘ื•ืื• ื ืจืขื ืŸ ืืช ื”ื™ื“ืข ืฉืœื›ื ื‘ืžืชืžื˜ื™ืงื”):
1! = 1 2! = 1 * 2 = 2 3! = 1 * 2 * 3 = 6 4! = 1 * 2 * 3 * 4 = 24 5! = 1 * 2 * 3 * 4 * 5 = 120
ื•ื™ืฉ ืขื•ื“ ื›ืœืœ ืงื˜ืŸ ืื—ื“ ืขื‘ื•ืจ 0:
!0 = 1
ืื ืื ื—ื ื• ืจื•ืฆื™ื ืœื—ืฉื‘ ืืช ื”ื”ืคืจืฉ ื‘ื™ืŸ 6! ื•-4!:
6!-4! = 1โ‹…2โ‹…3โ‹…4โ‹…5โ‹…6 - 1โ‹…2โ‹…3โ‹…4 = 720 - 24 = 696
ื‘ื•ื ื ืจืื” ืื™ืš ื–ื” ื™ื™ืจืื” ื›ืฉืžื™ื•ืฉื ื‘ืชื›ื ื•ืช. ื ื—ืงื•ืจ ื›ืžื” ื“ืจื›ื™ื ื›ื™ืฆื“ ืœื‘ืฆืข ื—ื™ืฉื•ื‘ื™ื ืฉืœ ืคืงื˜ื•ืจื™ ื‘-Java.

ืคืชืจื•ืŸ ืจื’ื™ืœ ื‘ืชื•ื›ื ื™ืช ืคืงื˜ื•ืจื™ืืœื™ืช

ืœื”ืœืŸ ืชื•ื›ื ื™ืช ืคืงื˜ื•ืจื™ ืคืฉื•ื˜ื” ื”ืžืฉืชืžืฉืช ื‘ืœื•ืœืื”:
class FactorialExample{
 public static void main(String args[]){
  int i,fact=1;
  int number=7;// our number to do the necessary calculations in class Factorial
  for(i=1;i<=number;i++){
      fact=fact*i;
  }
  System.out.println("Factorial of "+number+" is: "+fact);
 }
}
ื”ืคืœื˜ ืฉืœื ื• ื‘ืงื•ื ืกื•ืœื” ื™ื”ื™ื”:
ืคืงื˜ื•ืจ ืฉืœ 7 ื”ื•ื: 5040
ื•ืขื•ื“ ื“ื•ื’ืžื” ืื—ืช ืœืกื“ืจ ื”ื“ื‘ืจื™ื:
public static int getFactorial(int f) {
  int result = 1;
  for (int i = 1; i <= f; i++) {
     result = result * i; // finding factorial of number using loops
  }
  return result;
}
ืื™ืŸ ื›ืืŸ ืฉื•ื ื“ื‘ืจ ืงืฉื”: ืื ื• ืžืฉืชืžืฉื™ื ื‘ืžืกืคืจ ืฉืขื‘ืจ ื›ื’ื•ื“ืœ ื”ืœื•ืœืื” ืฉืœื ื•, ืฉื‘ื” ื ื›ืคื™ืœ ื‘ื›ืœ ื”ืžืกืคืจื™ื ื”ืงื•ื“ืžื™ื ืขื“ ืฉื ื’ื™ืข ืœ-f. ื•ื‘ืขื™ืงืจ:
System.out.println(getFactorial(6) - getFactorial(4));
ื‘ื‘ื“ื™ืงืช ื”ืงื•ื“ ืื ื• ืจื•ืื™ื ืฉืื ื• ืžืงื‘ืœื™ื ืืช ื”ืชื•ืฆืื” ื”ืจืฆื•ื™ื”: 696.

ืคืชืจื•ืŸ ืจืงื•ืจืกื™ื‘ื™

ืจืงื•ืจืกื™ื” ืžืชืจื—ืฉืช ื›ืืฉืจ ืฉื™ื˜ื” ืงื•ืจืืช ืœืขืฆืžื”. ืฉื™ื˜ื” ื›ื–ื• ื ืงืจืืช ืฉื™ื˜ื” ืจืงื•ืจืกื™ื‘ื™ืช. ื›ื›ืœืœ, ื”ื•ื ืžื•ืจื›ื‘ ืžืฉื ื™ ื—ืœืงื™ื:
  1. ืชื ืื™ ืžืกื™ื™ื - ื›ืืฉืจ ื”ืชื ืื™ ื”ืžืกื™ื™ื ืžืชืงื™ื™ื, ื”ืฉื™ื˜ื” ืฆืจื™ื›ื” ืœื”ืคืกื™ืง ืœืงืจื•ื ืœืขืฆืžื” ื•ืœื”ืชื—ื™ืœ ืœื”ืขื‘ื™ืจ ืขืจื›ื™ื ืœืžืขืœื”. ืื—ืจื™ ื”ื›ืœ, ืื ืื™ืŸ ืชื ืื™ ืžืกื™ื™ื, ืื– ืชื”ื™ื” ืœื ื• ืœื•ืœืื” ืื™ื ืกื•ืคื™ืช, ื›ืืฉืจ ื”ืฉื™ื˜ื” ืงื•ืจืืช ืœืขืฆืžื” ืฉื•ื‘ ื•ืฉื•ื‘ ืขื“ ืฉื ืงื‘ืœ StackOverflowError .
  2. ืœื ืžืฉื ื” ืžื” ื”ื”ื™ื’ื™ื•ืŸ ืฉื”ืžืฆื‘ ื“ื•ืจืฉ ืคืœื•ืก ืงืจื™ืื” ืจืงื•ืจืกื™ื‘ื™ืช, ืื‘ืœ ืขื ืขืจืš ืงืœื˜ ืฉื•ื ื”.
ืžืฆื™ืืช ื”ืคืงื˜ื•ืจื™ ื‘-Java ื”ื™ื ื“ื•ื’ืžื” ืžื•ืฉืœืžืช ืœืžื•ืขื“ ื”ืฉื™ืžื•ืฉ ื‘ืจืงื•ืจืกื™ื”:
public static int getFactorial(int f) { // finding factorial of number using recursive solution
  if (f <= 1) {
     return 1;
  }
  else {
     return f * getFactorial(f - 1);
  }
}
ืชื ืื™ ืกื™ื•ื ื”ืจืงื•ืจืกื™ื” ืฉืœื ื• ื™ื”ื™ื” ื›ืฉื ื’ื™ืข ืœ-1. ืื ื”ืคืจืžื˜ืจ ืื™ื ื• 1, ื ื›ืคื™ืœ ืืช ื”ืขืจืš ื”ื ื•ื›ื—ื™ ื‘ืชื•ืฆืื” ืฉืœ ื”ืงืจื™ืื” ื”ืจืงื•ืจืกื™ื‘ื™ืช ื”ื‘ืื” ืœืžืชื•ื“ื” (ืืœื™ื” ื ืขื‘ื™ืจ ืืช ื”ืขืจืš ื”ื ื•ื›ื—ื™ ืžื™ื ื•ืก 1).

ืคืชืจื•ืŸ ืขื ื–ืจื

ืžื™ ืฉืœื ืžื›ื™ืจ ืืช ืคื•ื ืงืฆื™ื•ื ืœื™ื•ืช ื”-Stream ืฉืœ Java, ืื• ื›ืœ ืžื™ ืฉืจื•ืฆื” ืœืจืขื ืŸ ืืช ื”ื–ื™ื›ืจื•ืŸ ืฉืœื•, ื™ืจื•ื•ื™ื— ืžืงืจื™ืื” ืขืœ ื›ืืŸ .
public static int getFactorial(int f) { // finding factorial of number using Stream
  if (f <= 1) {
     return 1;
  }
  else {
     return IntStream.rangeClosed(2, f).reduce((x, y) -> x * y).getAsInt();
  }
}
ื›ืืŸ ืื ื• ืžืฉืชืžืฉื™ื ื‘ืžื—ืœืงื” ื”ืžื™ื•ื—ื“ืช IntStream , ืฉื ื•ืชื ืช ืœื ื• ื™ื›ื•ืœื•ืช ื ื•ืกืคื•ืช ื‘ืขื‘ื•ื“ื” ืขื ื–ืจื ืขืจื›ื™ int. ื›ื“ื™ ืœื™ืฆื•ืจ ื–ืจื ื›ื–ื”, ืื ื• ืžืฉืชืžืฉื™ื ื‘ืฉื™ื˜ืช rangeClosed ื”ืกื˜ื˜ื™ืช ืฉืœื• , ื”ืžื™ื™ืฆืจืช ืขืจื›ื™ื ืž-2 ืขื“ f, ื›ื•ืœืœ, ื‘ืžืจื•ื•ื—ื™ื ืฉืœ 1. ืœืื—ืจ ืžื›ืŸ, ืื ื• ืžืฉืชืžืฉื™ื ื‘ืฉื™ื˜ืช reduce ื›ื“ื™ ืœืฉืœื‘ ืืช ื›ืœ ื”ืขืจื›ื™ื. ืœื™ืชืจ ื“ื™ื•ืง, ืื ื• ืžืจืื™ื ื›ื™ืฆื“ ืื ื• ืจื•ืฆื™ื ืœืฉืœื‘ ื‘ื™ืŸ ื”ืขืจื›ื™ื. ืœื‘ืกื•ืฃ, ืื ื• ืžืงื‘ืœื™ื ืืช ื”ืขืจืš ื”ืžืชืงื‘ืœ ื‘ืืžืฆืขื•ืช ืฉื™ื˜ืช ื”ืžืกื•ืฃ getAsInt .

ืฉื™ืžื•ืฉ ื‘-BigInteger

ื‘-Java, ื”ืžื—ืœืงื” BigInteger ืžืฉืžืฉืช ืœืขืชื™ื ืงืจื•ื‘ื•ืช ืœื˜ื™ืคื•ืœ ื‘ืžืกืคืจื™ื, ื‘ืžื™ื•ื—ื“ ื‘ืžืกืคืจื™ื BIG. ื•ืื›ืŸ, ืื ืื ื• ืžืฉืชืžืฉื™ื ื‘-int , ืื– ื”ืคืงื˜ื•ืจื™ืืœ ื”ืžืงืกื™ืžืœื™ ืฉื ื•ื›ืœ ืœื”ืชืžื•ื“ื“ ืื™ืชื• ืœืœื ืื•ื‘ื“ืŸ ื ืชื•ื ื™ื ื”ื•ื 31. ืขื‘ื•ืจ ืกื•ื’ ื”ื ืชื•ื ื™ื ื”ืืจื•ืš , ื”ืคืงื˜ื•ืจื™ืืœ ื”ืžืงืกื™ืžืœื™ ื”ื•ื 39. ืื‘ืœ ืžื” ืื ืื ื—ื ื• ืฆืจื™ื›ื™ื ืืช ื”ืคืงื˜ื•ืจืืœื™ ืฉืœ 100? ื‘ื•ืื• ื ืชืื™ื ืืช ื”ืคืชืจื•ื ื•ืช ื”ืงื•ื“ืžื™ื ืœ-BigInteger.ืชื•ื›ื ื™ืช Java ืขื‘ื•ืจ ืคืงื˜ื•ืจื™ - 2

ืคืชืจื•ืŸ ืจื’ื™ืœ

public static BigInteger getFactorial(int f) { // finding factorial of number using BigInteger
  BigInteger result = BigInteger.ONE;
  for (int i = 1; i <= f; i++)
     result = result.multiply(BigInteger.valueOf(i));
  return result;
}
ื”ืืœื’ื•ืจื™ืชื ื‘ืขืฆื ื–ื”ื”, ืื‘ืœ ื›ืืŸ ืื ื• ืžืฉืชืžืฉื™ื ื‘ื™ื›ื•ืœื•ืช ืฉืœ BigInteger: BigInteger.ONE ื”ื•ื ื”ืขืจืš ื”ื”ืชื—ืœืชื™ 1, ื•- multiply() ืžืฉืžืฉ ืœื”ื›ืคืœืช ื”ืขืจืš ื”ืคืงื˜ื•ืจื™ืืœื™ ื”ืงื•ื“ื ื•ื”ืžืกืคืจ ื”ื ื•ื›ื—ื™.

ืคืชืจื•ืŸ ืจืงื•ืจืกื™ื‘ื™

public static BigInteger getFactorial(int f) {
  if (f <= 1) {
     return BigInteger.valueOf(1);
  }
  else {
     return BigInteger.valueOf(f).multiply(getFactorial(f - 1));
  }
}
ื”ื”ื™ื’ื™ื•ืŸ ื”ื›ืœืœื™ ืฉืœ ื”ืคืชืจื•ืŸ ืื™ื ื• ืžืฉืชื ื”, ืคืจื˜ ืœื›ืš ืฉืžืชื•ื•ืกืคื•ืช ื›ืžื” ืฉื™ื˜ื•ืช ืœืขื‘ื•ื“ื” ืขื BigInteger.

ืคืชืจื•ืŸ ืขื ื–ืจื

public static BigInteger getFactorial(int f) {
  if (f < 2) {
     return BigInteger.valueOf(1);
  }
  else {
     return IntStream.rangeClosed(2, f).mapToObj(BigInteger::valueOf).reduce(BigInteger::multiply).get();
  }
}
ื”ื›ืœ ื‘ืขืฆื ืื•ืชื• ื“ื‘ืจ, ืื‘ืœ ืขื BigInteger. ื”ืžื—ืœืงื” Stream ื ื•ืชื ืช ืœื ื• ืืช ืฉื™ื˜ืช mapToObj , ืฉื‘ื” ืื ื• ืžืฉืชืžืฉื™ื ื›ื“ื™ ืœื”ืžื™ืจ ืขืจื›ื™ int ืœ-BigInteger ืขืœ ืžื ืช ืœื”ื›ืคื™ืœ ืื•ืชื ืขื ืขืฆืžื ื‘ืืžืฆืขื•ืช ืฉื™ื˜ืช multiply (ื•- get() ื ื•ืกืคื” ื›ื“ื™ ืœืงื‘ืœ ืื•ื‘ื™ื™ืงื˜ ืžื”ืขื˜ื™ืคื” Optional ). ืื ื ืจื™ืฅ ืื—ืช ืžืฉืœื•ืฉ ื”ืฉื™ื˜ื•ืช ื”ืœืœื• ืขื ืืจื’ื•ืžื ื˜ ืฉืœ 100, ืื– ื ืžื ืข ืžื’ืœื™ืฉื” ืฉืœ ืžื—ืกื ื™ืช ื•ื ืงื‘ืœ ืืช ื”ืชื•ืฆืื” ื”ื ื›ื•ื ื”:
933262154443944152681699238856266700490715968264381621468592963895217599993229915608941463976272528376272527252725272525272527252527252527252525252525252525252525252525252525252725 1185210916864000000000000000000000000
ื”ืขืจื•ืช
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION