阴山黑市声望友好:c语言大师请进,下面程序有什么错?

来源:百度文库 编辑:高校问答 时间:2024/04/28 06:40:15
/* Note:Your choice is C IDE
一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
*/
#include "stdio.h"
#include "math.h"
main()
{
long int i,x,y;
for(i=1;i<100000;i++)
{
x=sqrt(i+100); /*x为加上100后开方后的结果*/
y=sqrt(i+268); /*y为再加上168后开方后的结果*/
if(x*x==i+100 && y*y==i+268)
printf("\n%ld\n",i);
}
}

没错

x=sqrt(i+100);
y=sqrt(i+268);
由于x和y均为长整形,所以括号内的数开平方后其小数点后的值会被抹去,导致最终的答案不匹配。
你可以换个角度考虑,99*99=9801,100*100=10000
所以该数加168后的平方根不会大于100,代码如下:
#include "stdio.h"

main()
{
for(int x=1;x<100;x++)
{ for (int y=x+1;y<x+14;y++)
{
if((x*x+100)==(y*y+268))
printf("\n%d\n",(x*x));
}
}
}