Hello, First of all thanks for the initative, i am new on this website and enjoy the challenges so far. I have some issues with these 2 beginner problems : FCTRL and FCTRL2. I have browsed the Forum already but I did not find anything relevant that might help me. I mainly code in Java and I am not an expert, the issues I am having are : - Wrong answer for FCTRL. - Too much time for FCTRL2.
In both case it takes at lest 2 minutes for the tests to compute and to send me a response.
I don't really see what is wrong in my code as I get the good answers for the examples given in the problem wording and it is fast.
Here are my programs :
FCTRL :
import java.io.IOException;
import java.io.PrintWriter;
import java.math.BigDecimal;
import java.util.Scanner;
public class Main {
public static void main(String[] args) throws IOException {
Scanner sc = new Scanner(System.in);
PrintWriter stdout = new PrintWriter(System.out);
int n = sc.nextInt();
for (int i = 0; i < n; i++) {
BigDecimal value = new BigDecimal(sc.nextInt());
int trailingZeros = 0;
while (value.divide(new BigDecimal("5")).compareTo(new BigDecimal("1")) == 1) {
trailingZeros += value.divide(new BigDecimal("5")).intValue();
value = value.divide(new BigDecimal("5"));
}
stdout.println(trailingZeros);
}
sc.close();
stdout.flush();
stdout.close();
}
}
FCTRL2 :
import java.io.IOException;
import java.io.PrintWriter;
import java.math.BigInteger;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;
public class Main {
public static BigInteger[] compute(int max){
BigInteger[] nFact = new BigInteger[max];
nFact[0] = new BigInteger("1");
for (int i = 1; i < max; i++) {
nFact[i] = nFact[i-1].multiply(new BigInteger(i+1+""));
}
return nFact;
}
public static void main(String[] args) throws IOException {
Scanner sc = new Scanner(System.in);
PrintWriter stdout = new PrintWriter(System.out);
int n = sc.nextInt();
List<Integer> values = new ArrayList<Integer>();
for (int i = 0; i < n; i++) values.add(sc.nextInt());
int max = Collections.max(values);
BigInteger[] nFact = compute(max);
for (int i = 0; i < n; i++) {
stdout.println(nFact[values.get(i)-1]);
}
sc.close();
stdout.flush();
stdout.close();
}
}
I really hope someone can help me ! Thanks !
EDIT : For FCTRL to work I had to change the condition
value.divide(new BigDecimal("5")).compareTo(new BigDecimal("1")) == 1
in the while loop by :
value.divide(new BigDecimal("5")).compareTo(new BigDecimal("1")) == 1 || value.divide(new BigDecimal("5")).compareTo(new BigDecimal("1")) == 0