summaryrefslogtreecommitdiff
path: root/032.c
diff options
context:
space:
mode:
Diffstat (limited to '032.c')
-rw-r--r--032.c64
1 files changed, 64 insertions, 0 deletions
diff --git a/032.c b/032.c
new file mode 100644
index 0000000..13c40b5
--- /dev/null
+++ b/032.c
@@ -0,0 +1,64 @@
+
+#include <stdio.h>
+
+/*
+ * much faster than python version, though less optimized...
+ *
+ * to filter out duplicates and add numbers:
+ * $ ./032 | sort -u | tr "\n" "+" | sed 's/+$/\n/' | bc
+ *
+ */
+
+int is_pandigital(long int a, long int b, long int c)
+{
+ char digits[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ char digit;
+ int i;
+
+ while(a > 0)
+ {
+ digit = a % 10;
+ if(digit == 0 || digits[digit]++)
+ return 0;
+ a /= 10;
+ }
+ while(b > 0)
+ {
+ digit = b % 10;
+ if(digit == 0 || digits[digit]++)
+ return 0;
+ b /= 10;
+ }
+ while(c > 0)
+ {
+ digit = c % 10;
+ if(digit == 0 || digits[digit]++)
+ return 0;
+ c /= 10;
+ }
+
+ for(i=1; i<10; i++)
+ if(digits[i] != 1)
+ return 0;
+ return 1;
+}
+
+int main(void)
+{
+ long int limit = 10000;
+ long int a, b, c;
+ for(a=2; a<limit; a++)
+ {
+ for(b=2; b<limit; b++)
+ {
+ c = a * b;
+ if(c > limit)
+ break;
+ if(is_pandigital(a, b, c))
+ printf("%ld\n", c);
+ }
+ }
+
+ return 0;
+}
+