Специально заморочился, пошел заведомо сложным и интересным путем, выстроил такое решение.
Все считает, на числах 13, 30, 50 проверял точно.
Не принимает по 2 и 3 пунктам.
До сих пор обходился без раздела Помощь, но тут вообще тупик.
Кто-нибудь поможет угадать, чем ему не нравится мое решение?
package com.javarush.task.task15.task1531;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.math.BigDecimal;
import java.util.ArrayList;
/*
Факториал
*/
public class Solution {
static ArrayList<Integer> list = new ArrayList<>();
public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
int input = Integer.parseInt(reader.readLine());
reader.close();
System.out.println(factorial(input));
}
public static String factorial(int n) {
//add your code here
if (n < 0) return "0";
if (n == 0) return "1";
list.add(0, 1);
for (int i = 1; i <= n ; i++) {
product(i);
}
String result = "";
for (int i = list.size() - 1; i >= 0; i--)
result += list.get(i);
return result;
}
private static void product(int n) {
ArrayList<Integer> newList = new ArrayList<>();
int nextDigitAdd = 0;
for (int i = 0; i < list.size(); i++) {
int thisDigit = list.get(i);
newList.add(((thisDigit * n) + nextDigitAdd) % 10);
nextDigitAdd = (thisDigit * n + nextDigitAdd) / 10;
if (i == list.size() - 1) {
while (nextDigitAdd > 0) {
newList.add(nextDigitAdd % 10);
nextDigitAdd /= 10;
}
}
}
list = newList;
}
}