diff options
| author | Reiner Herrmann <reiner@reiner-h.de> | 2014-08-31 20:21:45 +0200 |
|---|---|---|
| committer | Reiner Herrmann <reiner@reiner-h.de> | 2014-08-31 20:35:09 +0200 |
| commit | 95341b61b030c9e1290f3b326cb7ec584f543aea (patch) | |
| tree | 852386fa04d32eb859bca11c0eff7b5ef9e50f00 /032.c | |
| parent | 571164d977f91925c4c76a292f74f5f93d09ae23 (diff) | |
Diffstat (limited to '032.c')
| -rw-r--r-- | 032.c | 64 |
1 files changed, 64 insertions, 0 deletions
@@ -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; +} + |
