#include #include unsigned int mult(unsigned char *s,long n); disp(unsigned char *s); main() { unsigned char val[60500] = "\x2"; unsigned int l,a; srand(clock()); a = 0; do { a++; l = mult(val,2); printf("2^%-7u = ",a,l); disp(val); printf(" (%u digits)\n",l*2 + ((val[l-1] < 11) ? -1:0) ); } while (l < 60450 && (!kbhit() || getch() != 27)); return 0; } disp(unsigned char *s) { unsigned int a; unsigned int t,t2; unsigned int c,d,e; t2 = a = strlen(s); c = t2 * 2; if (s[a-1] < 11) c--; c %= 3; if (c == 0) c = 3; d = 3-c; /* l c d 1,000 4 1 2 11,000 5 2 1 111,000 6 0 0 */ printf(" "); d = 3-c; if (d) for (;d;d--) printf(" "); d = -1; while (a) { a--; t = (s[a]-1); if (a != t2-1 || t/10 != 0) { printf("%d",t/10); if (--c == 0 && a != 0) { c = 3; printf(","); if (++d == 15) { printf("\n "); d = 0; } } } printf("%d",t%10); if (--c == 0 && a != 0) { c = 3; printf(","); if (++d == 15) { printf("\n "); d = 0; } } } printf("\n"); return 0; } unsigned int mult(unsigned char *s,long n) { unsigned int a; unsigned long c; c = 0; for (a=0;s[a];a++) { c += (s[a] - 1) * n; s[a] = 1 + c % 100; c /= 100; } while (c) { s[a] = 1 + c % 100; c /= 100; a++; } s[a] = 0; return a; }