问题描述:
什么是一数三平方呢?就是这样的一个六位数,它本身是一个整数的平方,其高三位和低三位也分别是一个整数的平方,如225635=475的平方。求满足上述条件的所有六位数。
解题思路:
利用for循环对100000~999999之间的所有的数按条件进行判断,将满足条件的数在屏幕上打印出来。设循环变量为i,初值为100000,从100000变化到999999;依次判断条件是否成立,如果成立则输出,否则不输出。
1.对正在判断的数 i 进行 开平方,得到一个长整型的数值 n .
n=(long)sqrt((float)i);
程序中用到了数学函数sqrt(),因此在头文件中就必须包括数学函数库文件“#include<math.h>”
sqrt函数的一般形式:double sqrt(double sum),sqrt的函数返回值是一个double型,我们将sqrt函数的返回值强制转换成长整型,这样会使开平方后得到的小数失去小数点后面的部分,则平方后就不是原来的数了,若小数点后面为0,就不会产生数据流失,这样开方后的数和平方的数还是一样的,利用这个办法来判断一个数开方之后是整数。
,2.判断n的平方是否等于i,如果等于则求出其高三位n1和低三位n2;
if (i == n * n)
{
n1 = i / 1000;
n2 = i % 1000;
}
3.对高三位n1和低三位n2开平方,分别得到一个长整型的数值n3和n4;
n3 = (long)sqrt((float)n1);
n4 = (long)sqrt((float)n2);
4.判断n3和n4的平方是否同时满足等于n1和n2,如果满足条件就打印输出;
if ((n1 == n3 * n3) && (n2 == n4 * n4))
{
printf("%ld\t",i);
}
因为定义了长整型变量,因此在输出的时候应该使用%ld的格式进行输出;
完整的程序运行:
#include<stdio.h>
#include<math.h>
int main(void)
{
long i, n1, n2, n3, n4, n;
printf("这些数有:\n");
for (i = 100000; i <= 999999; i++)
{
n = (long)sqrt((float)i);
if (i == n * n)
{
n1 = i / 1000;
n2 = i % 1000;
n3 = (long)sqrt((float)n1);
n4 = (long)sqrt((float)n2);
if ((n1 == n3 * n3) && (n2 == n4 * n4))
{
printf("%ld\t",i);
}
}
}
printf("\n");
}
运行结果:
当然这并不是唯一的方法,我也是一个小白,只是将自己每天学的一个知识分享到这个上面,可能会有些错误,希望各位大佬指正!