有这样一个六位数,它本身是一个整数的平方,其高三位和低三位也分别是一个整数的平方,如225625=4752,请问满足上述条件的所有六位数有多少。
sqrt的返回值是一个double型,如将sqrt的返回值强制转换成长整型,这样会使开平方后得到的小数(小数点后不为0)失去其小数点后面的部分,那么,再对这个强制转换后的数再平方,所得结果将不会等于原来开平方前的数。
void main()
{
long i, n, n1, n2, n3, n4, count = 0; /定义变量为长整型 /
printf("这样的数有:\n");
for (i = 100000; i <= 999999; i++) /遍历所有的六位数 /
{
n = (long)sqrt(i); /对i值开平方,得到一个长整型数值n/
if (i == n * n) /判断n的平方是否等于i/
{
n1 = i / 1000; /求出高三位数 /
n2 = i % 1000; /求出低三位数 /
n3 = (long)sqrt(n1); /对n1值开平方,得到一个长整型数值n3/
n4 = (long)sqrt(n2); /对n2值开平方,得到一个长整型数值n4/
if (n1 == n3 * n3 && n2 == n4 * n4)
/判断是否同时满足n1等于n3的平方、n2等于n4的平方 /
{
count++; /count作为计数器,记录满足条件的个数 /
printf("%ld,", i); /将最终满足条件的i值输出 /
}
}
}
printf("\n满足条件的有:%d个", count); /输出满足条件的数的个数 /
printf("\n");
}