求问Javascript最后结果好像错了,不知道为什么

.程序分析:在10万以内判断,先将该数加上100后再开方,再将该数加上268后再开方,如果开方后的结果满足如下条件,即是结果。请看具体分析::一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
var i,x,y,z;
for (i=1;i<100000;i++){ 
x=Math.sqrt(i+100);
y=Math.sqrt(i+268);    
if(x*x==i+100&&y*y==i+268)
document.write(i+" ");
}

x=Math.sqrt(i+100);
y=Math.sqrt(i+268);
->
x=parseInt(Math.sqrt(i+100));
y=parseInt(Math.sqrt(i+268));

21 261 1581

**另外,已经回答过lz好几个问题,如果问题解决,请及时采纳,方法是点我回答右边的采纳按钮。

http://ask.csdn.net/my 可以找到你以前提出的问题**

先分析,完全平方数

n^2与(n+j)^2的差为2jn+j^2,其中j最小时为1。

所以,先假设 n^2就是i+100,(n+j)^2就是i+268.

即2jn+j^2=168.

推导出 n=(168-j^2)/(2j);

所以,可以程序可以向以下这么写

var j=1,n;
do{
    n = (168-(j*j))/(2*j);
    n<<0 == n && console.log(n*n - 100,n,j);
    j++;
}while(n>0)

很轻松的得到计算结果,共有4组

  • i=1581,n= 41,j= 2
  • i=261,n= 19,j= 4
  • i=21 ,n=11,j= 6
  • i=-99,n= 1,j= 12

现在我分析一下你的解题思路问题,
首先,i是整数,并没有要求是正整数,你设置i为0到10万,就是第一个错误。
其次,Math.sqrt获得的是浮点数,浮点数的后果是结果为真正值的近似值,近似值的平方,很有可能就变成整数了,所以,你的第二大错误就是使用了浮点数。为了避免这个问题,你可以先取整在验证,或者直接验证x,y到底是不是整数。