diff options
Diffstat (limited to '092.c')
| -rw-r--r-- | 092.c | 45 |
1 files changed, 45 insertions, 0 deletions
@@ -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; +} + |
