//Adapted from this answer: https://stackoverflow.com/a/44053522/920069
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char* factorial(int input1)
{
int val[200] = { 0 }; //100! is 158 digits
int carry = 0;
int size = 0;
val[size++] = 1;
for (int i = 2; i <= input1; i++)
{
for (int j = 0; j < size; j++)
{
int tmp = val[j] * i;
val[j] = (tmp + carry) % 10;
carry = (tmp + carry) / 10;
}
while (carry != 0)
{
val[size++] = carry % 10;
carry = carry / 10;
}
}
char* ret
= calloc(size
+1, 1); for (int i = 0; i < size; ++i)
{
ret[i] = val[size - i - 1] + '0';
}
return ret;
}
int main(void)
{
char* f = factorial(100);
return 0;
}
Ci8vQWRhcHRlZCBmcm9tIHRoaXMgYW5zd2VyOiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvNDQwNTM1MjIvOTIwMDY5CgojaW5jbHVkZSA8c3RkaW8uaD4KI2luY2x1ZGUgPHN0ZGxpYi5oPgojaW5jbHVkZSA8c3RyaW5nLmg+CgpjaGFyKiBmYWN0b3JpYWwoaW50IGlucHV0MSkKewoJaW50IHZhbFsyMDBdID0geyAwIH07IC8vMTAwISBpcyAxNTggZGlnaXRzCglpbnQgY2FycnkgPSAwOwoJaW50IHNpemUgPSAwOwoJdmFsW3NpemUrK10gPSAxOwoJZm9yIChpbnQgaSA9IDI7IGkgPD0gaW5wdXQxOyBpKyspCgl7CgkJZm9yIChpbnQgaiA9IDA7IGogPCBzaXplOyBqKyspCgkJewoJCQlpbnQgdG1wID0gdmFsW2pdICogaTsKCQkJdmFsW2pdID0gKHRtcCArIGNhcnJ5KSAlIDEwOwoJCQljYXJyeSA9ICh0bXAgKyBjYXJyeSkgLyAxMDsKCQl9CgkJd2hpbGUgKGNhcnJ5ICE9IDApCgkJewoJCQl2YWxbc2l6ZSsrXSA9IGNhcnJ5ICUgMTA7CgkJCWNhcnJ5ID0gY2FycnkgLyAxMDsKCQl9Cgl9CgoJY2hhciogcmV0ID0gY2FsbG9jKHNpemUrMSwgMSk7Cglmb3IgKGludCBpID0gMDsgaSA8IHNpemU7ICsraSkKCXsKCQlyZXRbaV0gPSB2YWxbc2l6ZSAtIGkgLSAxXSArICcwJzsKCX0KCXJldHVybiByZXQ7Cn0KCmludCBtYWluKHZvaWQpCnsKCWNoYXIqIGYgPSBmYWN0b3JpYWwoMTAwKTsKCXByaW50ZigiJXNcbiIsIGYpOwoJcmV0dXJuIDA7Cn0K