Problem 92: Square Digit Chains

A number chain is created by continuously adding the square of the digits in a number to form a new number until it has been seen before.

For example,

44 → 32 → 13 → 10 → 1 → 1
85 → 89 → 145 → 42 → 20 → 4 → 16 → 37 → 58 → 89

Therefore any chain that arrives at 1 or 89 will become stuck in an endless loop. What is most amazing is that EVERY starting number will eventually arrive at 1 or 89.

How many starting numbers below ten million will arrive at 89?

 

#include <iostream>

bool squareDigitCheck(int passedInt);

int main(void)
{
	int total = 0;

	for(int i = 1; i < 10000000; i++)
	{
		if(squareDigitCheck(i))
		{
			total++;
		}
	}
	std::cout << "There are " << total << " square digits that summate to 89 under 10000000";

	return 0;
}

bool squareDigitCheck(int passedInt)
{
	int squareBuff = 0, digitBuff;

	while(passedInt != 89)
	{
		while(passedInt)
		{
			digitBuff = passedInt % 10;
			passedInt /= 10;
			squareBuff += (digitBuff * digitBuff);
		}

		passedInt = squareBuff;
		squareBuff = 0;

		if(passedInt == 1)
		{
			return false;
		}
	}

	return true;
}

Leave a Reply

Your email address will not be published. Required fields are marked *