WCW

# Kaprekar Numbers

Below is my solution to the Programming Praxis problem from Sept. 21, 2010. The problem was to find all Kaprekar numbers less than 1000. I wrote my solution in C++ to refresh my skills a little. For more info, seeĀ this link.

```
// Author: William Clausen
// Date: Aug. 10, 2014
// Description: Programming Praxis problem from Sep. 21, 2010

// Write a program to determine Kaprekar numbers less than a given input

#include <vector>
#include <iostream> // for testing in main
#include <cmath> // for pow

using namespace std;

// Helper function that returns a power of 10 where the exponent is equal
// to the number of digits in number
int numDigits(int number) {
int result = 1;

// Next, add the appropriate number of zeros to the result.
while (result < number) {
result *= 10;
}

return result;
}

// Helper function that returns true if the input is a Kaprekar number and
// false otherwise.
bool isKaprekar(int number) {
int square = pow(number, 2);

// We need to know the number of digits in the input so figure that out.
// Get a power of ten where the exponent equals the number of digits
int modulo = numDigits(number);

// Get the last n digits of the square
int lastNDigits = square % modulo;

// Get the first n or n-1 digits
int firstDigits = square / modulo;

// Add these numbers to determine if it's a Kaprekar number
if (lastNDigits + firstDigits == number) {
return true;
}

return false;
}

// Function that returns a vector of all Kaprekar numbers less than the input.
vector<int> kaprekar(int limit) {
// Create the vector of Kaprekar numbers to be returned
vector<int> result;

// Loop through all the numbers and if they are kaprekar numbers, add them
// to the vector.
for (int i = 0; i < limit; ++i) {
if (isKaprekar(i)) {
result.push_back(i);
}
}

return result;
}

int main() {
// Determine the Kaprekar numbers less than 1000.