// factorials #include #include main() { char cur[30500] = "\x02"; char t[31000]; int c,b,a,d,e,l,f,g; char v; if (cur == 0 || t == 0) { printf("lamo!\n"); getch(); } for (a=1;a!=-32767;a++) { strcpy(t,cur); c = 0; for (b=0;t[b];b++) { c += a*(t[b]-1); cur[b] = 1 + c % 100; c /= 100; } while (c) { cur[b] = 1 + c % 100; c /= 100; b++; } cur[b] = 0; // reverse ... add commas d = strlen(cur)-1; e = 0; printf("%5d! = ",a); f = d*2 + (cur[d] > 10 ? 2:1); // f = 2 - f%3; f %= 3; if (f == 0) f = 3; for (e=0;e<3-f;e++) printf(" "); e = -1; // first two digits v = (cur[d]-1)/10; if (v) { printf("%c", v + '0'); f--; if (f == 0 && d >= 0) { printf(","); e++; f = 3; if (e == 15) { e = 0; printf("\n "); } } } printf("%c", (cur[d]-1)%10 + '0'); f--; d--; if (f == 0 && d >= 0) { printf(","); e++; f = 3; if (e == 15) { e = 0; printf("\n "); } } while (d >= 0) { v = (cur[d]-1)/10; printf("%c", v + '0'); f--; if (f == 0 && d >= 0) { printf(","); e++; f = 3; if (e == 15) { e = 0; printf("\n "); } } printf("%c", (cur[d]-1)%10 + '0'); f--; d--; if (f == 0 && d >= 0) { printf(","); e++; f = 3; if (e == 15) { e = 0; printf("\n "); } } } // t[e] = 0; // printf("%5d! = %s\n",a,t); printf("\n"); // l = strlen(cur); // cprintf("%5d! is %10d bytes\n\r",a,l); if (kbhit() && getch() == 27) break; getch(); } }