You are viewing a single comment's thread. Return to all comments →
For those of you interested in challenging yourself to write this in C
#include <math.h> #include <stdio.h> #include <string.h> #include <stdlib.h> #include <assert.h> #include <limits.h> #include <stdbool.h> int main(){ int n, length_digit = 1; scanf("%d",&n); int *r = malloc(60 * sizeof(int)); r[0] = 1; for (int factor = 2; factor <= n; factor++) { int *carry = malloc( (length_digit + 2) * sizeof(int)); // first, evaluate product for (int i = 0; i < length_digit; i++) { r[i] *= factor; r[i] += carry[i]; if (r[i] / 100 > 0) { carry[i + 2] += r[i] / 100; carry[i + 1] += (r[i] % 100) / 10; r[i] = r[i] % 10; } else if (r[i] / 10 > 0) { carry[i + 1] += r[i] / 10; r[i] = r[i] % 10; } } // second, consider if length of digit increases if (carry[length_digit + 1] > 0) { r[length_digit + 1] = carry[length_digit + 1]; r[length_digit + 1] += carry[length_digit] / 10; r[length_digit] = carry[length_digit] % 10; length_digit += 2; } else if (carry[length_digit] > 0) { r[length_digit] = carry[length_digit]; length_digit++; } } // print for(int i = length_digit - 1; i >= 0; i--){ printf("%d", r[i]); } }
Seems like cookies are disabled on this browser, please enable them to open this website
Extra Long Factorials
You are viewing a single comment's thread. Return to all comments →
For those of you interested in challenging yourself to write this in C