例:有这样一个六位数,它本身是一个整数的平方,其高三位和低三位也分别是一个整数的平方,如225625=475²,求满足上述条件的所有六位数。
核心算法:判断一个数是否是整数的平方
函数 double sqrt(double num)返回参数num的平方根(double型)
要判断强制取整是否会导致数据流失(小数点后不为0的小数会失去小数部分)
如果(int) sqrt(n)*(int) sqrt(n) == n,说明n是整数的平方
或如果(int) sqrt(n) == sqrt(n),说明根号下n是整数,即n是整数的平方
#include<stdio.h>
#include<math.h>
int main()
{
long i,n,n1,n2,n3,n4,count=0;
printf("这样的数有:\n");
for(i=100000;i<=999999;i++)/*最小的六位数是100000,最大的六位数是999999,对所有六位数按条件进行试探*/
{
n=(long)sqrt(i);
if(i==n*n)/*判断这个六位数是否为整数的平方*/
{
n1=i/1000;/*求出高三位数*/
n2=i%1000;/*求出低三位数*/
n3=(long)sqrt(n1);
n4=(long)sqrt(n2);
if(n1==n3*n3&&n2==n4*n4)/*判断其高三位和低三位是否均为整数的平方*/
{
count++;/*count作为计数器,记录满足条件的个数*/
printf("%ld",i);
}
}
}
printf("\n满足条件的有:%d个",count);
printf("\n");
return 0;
}
或
#include<stdio.h>
#include<math.h>
int main()
{
long n,n1,n2;
int count = 0;
printf("这样的数有:\n");
for(n=100000;n<=999999;n++)
{
if((long)sqrt(n)==sqrt(n))
{
n1=n/1000;
n2=n%1000;
if((long)sqrt(n1)==sqrt(n1)&&(long)sqrt(n2)==sqrt(n2))
{
count++;
printf("%ld",n);
}
}
}
printf("\n满足条件的有:%d个",count);
printf("\n");
return 0;
}