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. vector<int> answer = kaprekar(1000); cout << "The Kaprekar numbers less than 1000 are: "; for (int i = 0; i < answer.size(); ++i) { cout << answer[i] << ", "; } cout << "\n"; }