diff options
author | Raphael McSinyx <vn.mcsinyx@gmail.com> | 2016-10-12 22:16:44 +0700 |
---|---|---|
committer | Raphael McSinyx <vn.mcsinyx@gmail.com> | 2016-10-12 22:16:44 +0700 |
commit | cf7269205b346cf16b35d258989bb19819427e9b (patch) | |
tree | c9fff2ff44fb3ed8c70676b7c459725a611e53c5 /daily/287easy/kaprekar.c | |
parent | 9d40b667d430b90f48df11c6505878539ac542fe (diff) | |
download | cp-cf7269205b346cf16b35d258989bb19819427e9b.tar.gz |
Add /r/dailyprogrammer Challenge #287 [Easy]
Diffstat (limited to 'daily/287easy/kaprekar.c')
-rw-r--r-- | daily/287easy/kaprekar.c | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/daily/287easy/kaprekar.c b/daily/287easy/kaprekar.c new file mode 100644 index 0000000..3121d88 --- /dev/null +++ b/daily/287easy/kaprekar.c @@ -0,0 +1,79 @@ +#include <stdio.h> + +char a[4]; + +char largest_digit(short n) +{ + char m = n / 1000; + + if (m < n % 1000 / 100) + m = n % 1000 / 100; + + if (m < n % 100 / 10) + m = n % 100 / 10; + + return (m < n % 10) ? n % 10 : m; +} + +void sort_digits(short n) +{ + char i, j; + + a[0] = n / 1000; + a[1] = n % 1000 / 100; + a[2] = n % 100 / 10; + a[3] = n % 10; + + for (i = 0; i < 3; i++) + for (j = i + 1; j < 4; j++) + if (a[i] < a[j]) { + a[i] += a[j]; + a[j] = a[i] - a[j]; + a[i] -= a[j]; + } +} + +short desc_digits(short n) +{ + sort_digits(n); + + return a[0] * 1000 + a[1] * 100 + a[2] * 10 + a[3]; +} + +short asc_digits(short n) +{ + sort_digits(n); + + return a[3] * 1000 + a[2] * 100 + a[1] * 10 + a[0]; +} + +unsigned long long kaprekar(short n) +{ + char i; + + for (i = 0; n ^ 6174; i++) + n = desc_digits(n) - asc_digits(n); + + return i; +} + +int main() +{ + printf("largest_digit(1234) -> %hhd\n", largest_digit(1234)); + printf("largest_digit(3253) -> %hhd\n", largest_digit(3253)); + printf("largest_digit(9800) -> %hhd\n", largest_digit(9800)); + printf("largest_digit(3333) -> %hhd\n", largest_digit(3333)); + printf("largest_digit(120) -> %hhd\n\n", largest_digit(120)); + + printf("desc_digits(1234) -> %hd\n", desc_digits(1234)); + printf("desc_digits(3253) -> %hd\n", desc_digits(3253)); + printf("desc_digits(9800) -> %hd\n", desc_digits(9800)); + printf("desc_digits(3333) -> %hd\n", desc_digits(3333)); + printf("desc_digits(120) -> %hd\n\n", desc_digits(120)); + + printf("kaprekar(6589) -> %lld\n", kaprekar(6589)); + printf("kaprekar(5455) -> %lld\n", kaprekar(5455)); + printf("kaprekar(6174) -> %lld\n", kaprekar(6174)); + + return 0; +} |