summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/projecteuler/062.c57
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;
+}
+