150! = 57133839564458545904789328652610540031895535786011264182548375833179829124845398393126574488675311145377107878746854204162666250198684504466355949195922066574942592095735778929325357290444962472405416790722118445437122269675520000000000000000000000000000000000000
不知是否正确 反正通过不了
package zh.codegym.task.task15.task1531;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.math.BigDecimal;
/*
阶乘
*/
public class Solution {
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) {
//在此编写你的代码
if (n < 0) return "0";
else if (n == 0) return "1";
else {
int[] result = new int[5001];
int[] c = new int[5001];
result[0] = 1;
long len = 0;
for (int k = 1; k <= n; k++){
int[] num = {k%10, k/10%10, k/100};
for (int i = 0; i < 5001; i++){
c[i] = 0;
}
for (int i = 0; i < 4997; i++){
for (int j = 0; j < 3; j++){
c[i+j] += result[i]*num[j];
}
c[i+1] += c[i]/10;
c[i] = c[i]%10;
}
for (int i = 0; i < 5001; i++){
result[i] = c[i];
}
}
for (int i = 5000; i > 0; i--){
if (result[i] > 0) {
len = i+1;
break;
}
}
String s = "";
for (int i = 0; i < len; i++){
s = result[i] + s;
}
return s;
}
}
}