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;
}