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