本帖最后由 ZPCG 于 2011-8-15 01:12 编辑
错误在这里:
你定义的是
int x;
double i,j;
在if (i*i==x+100&&j*j==x+268)这句时,1、由于类型不同,精度不一样 i*i永远不会==x+100
或者2、出现平子队长回复所说的抵销问题.
所以说要这样 int x, i, j;这样就可以了。
比如说:#include<stdio.h>
#include "math.h"
void main()
{
int i,x,y;
for ( i = 1; i < 100000; i++)
{
x=sqrt(i+100);
y=sqrt(i+268);
if (x*x == i+100 && y*y == i+268)
printf("\n%d\n",i);
}
}
得出的结果是:21 261 1581。
话说回来,如果你的脾气实在犟,一定要int x;而且也要 double i, j;那也行,可以象下面代码一样,你想用double或 float或 int都OK的。
#include <stdio.h>
#include <math.h>
void main ()
{
int x;
double i,j;
for (x=1;x<=10000;x++)
{
i= sqrt (x+100);
j= sqrt (x+268);
if ((int)i*(int)i==x+100 && (int)j*(int)j==x+268)
printf ("%d\n",x);
}
}
得出的结果照样是:21 261 1581。
本回复代码均经VC++6.0通过.请楼主验证.
|