黑马程序员技术交流社区
标题:
算法问题
[打印本页]
作者:
松毛
时间:
2013-11-15 08:05
标题:
算法问题
本帖最后由 松毛 于 2013-11-15 10:27 编辑
class Test
{
public static void main(String[] args)
{
for(int x=1;x<10000;x++)
{
if(Math.sqrt(x+100)%1 == 0)
{
if(Math.sqrt(x+268)%1 == 0)
{
System.out.println(x);
}
}
}
}
}
该程序是求一个整数的加100后为一个完全平方数,再加268后又是一个完全平方数, 程序中%1是什么意思啊?
作者:
代文娟
时间:
2013-11-15 08:17
%1的目的是:如果Math.sqrt(x+100)的值为整数的话除以1的余数为0.如果是小数的话也就是它不是一个完全平方数,除以1的余数不为0。实际上就是为了判断Math.sqrt(x+100)是不是个整数。
作者:
Θ动@咚Θ
时间:
2013-11-15 09:14
Math.sqrt方法是求一个参数的正平方根,计算平方根后,得到的结果很可能不是一个整数,而是一个小数。这里面这个%1 的处理其实就是判断得到的这个结果是不是小数。x%y 计算的是x除以y后得到的余数,这里判断除以1取余数是否为0,说白了就是看这个数是不是1的整数倍,也就是说判断它是不是整数~~
作者:
FFF
时间:
2013-11-15 09:40
Math.sqrt是一个方法、返回的指定数字的平方根。
而%是取模运算符。2%1=0 ;3%2=1 ;10%5=0;100%99=1;
少年,你懂了吗?
作者:
王雨神
时间:
2013-11-15 10:04
%在java中是取余运算符,例:5%3=2而5/3=1。
这里的作用就是看看能不能整除一,也就是看是不是整数。。。
作者:
严旭晟
时间:
2014-2-16 22:48
程序是正确的,因为java支持对double型求余。但是,不建议这样写,这个程序没法在c++里面跑,作为算法不佳
Math.sqrt()方法默认返回double,所以Math.sqrt(x+100)的值为不是整数
而是,在进行==比较时,右边的0将提升为double
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2