## Monday, November 21, 2016

### Kaprekar Number - GeeksforGeeks

Kaprekar Number - GeeksforGeeks
A Kaprekar number is a number whose square when divided into two parts and such that sum of parts is equal to the original number and none of the parts has value 0. (Source : Wiki)
Given a number, the task is to check if it is Kaprekar number or not.

1. Find square of n and count number of digits in square.
2. Split square at different positions and see if sum of two parts in any split becomes equal to n.
`bool` `iskaprekar(``int` `n)`
`{`
`    ``if` `(n == 1)`
`       ``return` `true``;`

`    ``// Count number of digits in square`
`    ``int` `sq_n = n * n;`
`    ``int` `count_digits = 0;`
`    ``while` `(sq_n)`
`    ``{`
`        ``count_digits++;`
`        ``sq_n /= 10;`
`    ``}`

`    ``sq_n = n*n; ``// Recompute square as it was changed`

`    ``// Split the square at different poitns and see if sum`
`    ``// of any pair of splitted numbers is equal to n.`
`    ``for` `(``int` `r_digits=1; r_digits<count_digits; r_digits++)`
`    ``{`
`         ``int` `eq_parts = ``pow``(10, r_digits);`

`         ``// To avoid numbers like 10, 100, 1000 (These are not`
`         ``// Karprekar numbers`
`         ``if` `(eq_parts == n)`
`            ``continue``;`

`         ``// Find sum of current parts and compare with n`
`         ``int` `sum = sq_n/eq_parts + sq_n % eq_parts;`
`         ``if` `(sum == n)`
`           ``return` `true``;`
`    ``}`

`    ``// compare with original number`
`    ``return` `false``;`
`}`