Валидатор не пропускает решение почему-то. У меня при запуске все считывается как надо. Еще мне не понятно что указывает выражение BigDecimal(1). Что тут определяет единица? Я читал про значение знаков после запятой, но тут просто 1. Скажите что оно задает. Я надеюсь проблема здесь не в исключениях. Мне просто так код кажется более правильным чем просто все проверять через if. Валидатор не пропускает 2 и 3 пункт.
public class Solution {
    public static void main(String[] args) throws IOException {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        try {
            int input = Integer.parseInt(reader.readLine());
            if (input >= 0){
                reader.close();

                System.out.println(factorial(input));
            }
            else {
                throw new IllegalArgumentException("Число отрицательное. Введите положительное число");
            }
        }
        catch (IOException e){
            e.printStackTrace();
        }
    }

    public static String factorial(int n) {
        if (n == 0) return "0";
        BigDecimal bigdec = new BigDecimal(1);
        for (int i = 1; i <= n; i++) {
            bigdec = bigdec.multiply(new BigDecimal(i));
        }


        return bigdec.toString();


    }
}