diff options
| -rw-r--r-- | src/projecteuler/062.c | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/src/projecteuler/062.c b/src/projecteuler/062.c new file mode 100644 index 0000000..4ba3350 --- /dev/null +++ b/src/projecteuler/062.c @@ -0,0 +1,57 @@ +#include <stdlib.h> +#include <stdio.h> +#include <string.h> + +struct number +{ + char digits[10]; +}; + +const int cubecount = 30000; +struct number* cubedigits; + +int main(void) +{ + int i, j; + + cubedigits = (struct number*) malloc(cubecount*sizeof(struct number)); + memset(cubedigits, 0, cubecount*sizeof(struct number)); + + for(i=1; i<cubecount; i++) + { + unsigned long long c = (unsigned long long)i*i*i; + int smallest = 0; + char count; + + while(c > 0) + { + char digit = c % 10; + cubedigits[i].digits[digit]++; + c /= 10; + } + + // search for permutations (i.e. same digits) + count = 0; + for(j=1; j<i; j++) + { + if(memcmp(cubedigits[i].digits, cubedigits[j].digits, sizeof(struct number)) == 0) + { + if(smallest == 0) + smallest = j; + + count++; + } + } + + if(count == 4) // 4 additional permutations + { + printf("%lli\n", (unsigned long long)smallest*smallest*smallest); + break; + } + } + + free(cubedigits); + + return 0; +} + |
