#include <stdio.h>
#include <string.h>
#define BUF 20
int make_target(int nums[], int target, int mult, int length)
{
long newtarget = target - nums[length - 1] * mult;
if (length == 1)
return newtarget == 0;
else
return
(newtarget > 0) &&
(make_target(nums, newtarget, mult * 10, length-1) ||
make_target(nums, newtarget, 1, length-1));
}
int main()
{
int len, i;
long s, sqrt, total;
char buf[BUF];
int nums[BUF];
total = 0;
for (sqrt = 2; sqrt <= 9999; sqrt++)
{
s = sqrt * sqrt;
snprintf(buf, BUF, "%ld", s);
len = strlen(buf);
for (i = 0; i < len; i++)
nums[i] = buf[i] - '0';
if (make_target(nums, sqrt, 1, len)) {
total += s;
printf("%ld %ld %ld\n", s, sqrt, total);
}
}
printf("TOTAL: %ld\n", total);
return 0;
}