[your code here]

Jos van Uden user at domain.invalid
Sat Feb 11 03:20:22 PST 2012


bool isKaprekar(in long n) pure nothrow
in {
     assert(n > 0, "isKaprekar(n): n must be > 0");
     assert(n <= uint.max, "isKaprekar(n): n must be <= uint.max");
} body {
     ulong powr = n ^^ 2UL;
     ulong tens = 10, r, l;
     while (r < n) {
         r = powr % tens;
         l = powr / tens;
         if (r && l + r == n)
             return true;
         tens *= 10;
     }
     return false;
}

--

A positive integer is a Kaprekar number if:

-It is 1
-The decimal representation of its square may be split once into two 
parts consisting of positive integers which sum to the original number. 
Note that a split resulting in a part consisting purely of 0s is not 
valid, as 0 is not considered positive.

Example: 2223 is a Kaprekar number, as 2223 * 2223 = 4941729, 4941729 
may be split to 494 and 1729, and 494 + 1729 = 2223.

See also http://rosettacode.org/wiki/Kaprekar_numbers


More information about the Digitalmars-d mailing list