diff options
| author | Reiner Herrmann <reiner@reiner-h.de> | 2009-10-20 19:10:23 +0200 |
|---|---|---|
| committer | Reiner Herrmann <reiner@reiner-h.de> | 2014-08-31 20:10:58 +0200 |
| commit | 72a596370e376b380f6ff5e9a787582ffa088fdb (patch) | |
| tree | 96aaf5eebddfaf0350d869fbd8e6b189bc153b17 | |
| parent | ee4c43c85db85e0fae142656aace151dd3fb2dff (diff) | |
solution for project euler problem 92
| -rw-r--r-- | src/projecteuler/092.c | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/src/projecteuler/092.c b/src/projecteuler/092.c new file mode 100644 index 0000000..8616cf8 --- /dev/null +++ b/src/projecteuler/092.c @@ -0,0 +1,45 @@ + + +const int limit = 10000000; + +const int squares[10] = { 0, 1, 4, 9, 16, 25, 36, 49, 64, 81 }; + +int next_chain(int number) +{ + int sum = 0; + int digit; + while(number > 0) + { + digit = number % 10; + number = number / 10; + sum += squares[digit]; + } + return sum; +} + +int main() +{ + int* numbers = calloc(limit, sizeof(int)); + int i, count; + + for(i=0; i<limit; i++) + numbers[i] = next_chain(i); + + count = 0; + + for(i=1; i<limit; i++) + { + int next = numbers[i]; + while(next != 1 && next != 89) + next = numbers[next]; + + numbers[i] = next; + if(next == 89) + count++; + } + + printf("%d\n", count); + + return 0; +} + |
