// fac25.cpp - CALCULATE 25 FACTORIAL // // MAINTENANCE HISTORY // DATE PROGRAMMER AND DETAILS // 22-10-03 JS Original // //----------------------------------------------------------------------------- #include // Standard input/output #include // String manipulation functions //----------------------------------------------------------------------------- // DEFINITIONS #define PRECISION 30 // Precision of number in decimal digits //----------------------------------------------------------------------------- // MAIN LINE int main () { char reg[PRECISION]; // Extended precision register int i, j; // General purpose indices int carry; // Carry value // Initialise the register (reg = 1) memset (reg, 0, PRECISION); reg[0] = 1; // Multiply reg by 2, 3 ... 25 for (i = 2; i <= 25; i++) { carry = 0; for (j = 0; j < PRECISION; j++) { carry += reg[j] * i; reg[j] = carry % 10; carry /= 10; } } // Display the result for (j = PRECISION-1; j > 0 && reg[j] == 0; j--); for (; j >= 0; j--) putchar(reg[j] + '0'); putchar('\n'); // Exit gracefully return 0; }