A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 松毛 高级黑马   /  2013-11-15 08:05  /  1408 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 松毛 于 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是什么意思啊?

评分

参与人数 1技术分 +1 收起 理由
FFF + 1 少年,你要淡定.

查看全部评分

5 个回复

倒序浏览
%1的目的是:如果Math.sqrt(x+100)的值为整数的话除以1的余数为0.如果是小数的话也就是它不是一个完全平方数,除以1的余数不为0。实际上就是为了判断Math.sqrt(x+100)是不是个整数。

评分

参与人数 1黑马币 +3 收起 理由
FFF + 3 问题解释得不够详细。只能以金币奖励!.

查看全部评分

回复 使用道具 举报
Math.sqrt方法是求一个参数的正平方根,计算平方根后,得到的结果很可能不是一个整数,而是一个小数。这里面这个%1 的处理其实就是判断得到的这个结果是不是小数。x%y 计算的是x除以y后得到的余数,这里判断除以1取余数是否为0,说白了就是看这个数是不是1的整数倍,也就是说判断它是不是整数~~

评分

参与人数 1技术分 +1 收起 理由
FFF + 1 神马都是浮云

查看全部评分

回复 使用道具 举报
FFF 金牌黑马 2013-11-15 09:40:44
板凳
Math.sqrt是一个方法、返回的指定数字的平方根。
而%是取模运算符。2%1=0 ;3%2=1 ;10%5=0;100%99=1;
少年,你懂了吗?
回复 使用道具 举报
%在java中是取余运算符,例:5%3=2而5/3=1。
这里的作用就是看看能不能整除一,也就是看是不是整数。。。
回复 使用道具 举报
程序是正确的,因为java支持对double型求余。但是,不建议这样写,这个程序没法在c++里面跑,作为算法不佳
Math.sqrt()方法默认返回double,所以Math.sqrt(x+100)的值为不是整数
而是,在进行==比较时,右边的0将提升为double
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马