Здравей, не виждам проблем в логиката, предполагам проблемът е в това, че най-голямото число което може да се представи като Number е 2^53 - 1, а числата към 100 надвишават границата. Предлагам да използваш BigInt за представяне на числата, където няма горна граница. Понеже не могат да се смесват BigInt и Number, кодът ще изглежда така:
let input = ['50'];
let gets =
this.gets ||
(
(arr, index) => () =>
arr[index++]
)(input, 0);
let print = this.print || console.log;
let number = BigInt(+gets());
let factorial = BigInt(1);
for (let i = BigInt(2); i <= number; i++) {
if (number >= 0 && number <= 100) {
factorial *= i;
}
}
//добавям toString метода, понеже bigint числата завършват на 'n'
print(factorial.toString());