#include typedef unsigned char uint8; typedef unsigned long uint32; #define ARRAY_SIZE 8192 /* Calculate powers of two up to X numbers long */ #define LowNb(x) (x&0x0F) #define HighNb(x) ((x&0xF0)>>4) void Print_Number(uint32 cLoop, uint8 number[]) { int i=ARRAY_SIZE-1; printf("2^%3u ",cLoop); while(HighNb(number[i])==0 && LowNb(number[i])==0) { printf(" "); i--; } if(HighNb(number[i])) printf("%u%u",HighNb(number[i]),LowNb(number[i])); else printf(" %u",LowNb(number[i])); for(i--; i>-1; i--) printf("%u%u",HighNb(number[i]),LowNb(number[i])); printf("\r\n"); } int main(int argc, char* arg[]) { uint8 final[ARRAY_SIZE]; uint8 cRet = 0; uint8 cNb = 0; uint8 cTmp = 0; uint32 cLoop = 0; for(uint32 i=0; i9 ) { cRet = 1; cTmp %= 10; } else cRet = 0; cNb = cTmp; cTmp = (HighNb(final[i]))*2 + cRet; if( cTmp>9 ) { cRet = 1; cTmp %= 10; } else cRet = 0; cNb |= (cTmp<<4); final[i] = cNb; } //Print_Number(cLoop, final); //Uncomment to output every friggin' number (can be huge) if( HighNb(final[ARRAY_SIZE-1])>5 ) break; } Print_Number(cLoop, final); printf("We have reached 2^%u", cLoop); return 1; }