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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 依然超级赛亚人 高级黑马   /  2014-7-15 23:25  /  1530 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 依然超级赛亚人 于 2014-8-13 08:10 编辑

伙伴们,前两天我跟一个同学讨论一个问题:假如要编一个简单的程序,要求输出1-100之内能同时被2、3、5整除的所有整数。

for(int i=1;i<=100;i++){
if(i%2==0&&i%3==0&&i%5==0){//其他代码省略,默认正确书写。
   System.out.println(i);
   }
}
其中,表示能“同时被2、3、5整除”这段代码你们是怎么写的呢?是上述的“i%2==0&&i%3==0&&i%5==0”的吗?有其他的表达方式吗?发表你们的看法。
其实单纯就整除这个知识点来说,这是一个小学数学上的问题,当时只想到上面的代码,回过头来跳出编程这个问题,感觉有时我们想问题确实复杂了一点。

5 个回复

倒序浏览
如果随便给3个数,说找出某个范围内同时能被这三个数整除的数,那就是“i%2==0&&i%3==0&&i%5==0”的思路了。单就你的题目2、3、5来说,当然可以做一些优化。比如,从2、3、5的最小公倍数30开始循环,且只循环偶数,即for(int i = 2*3*5; i <= 100; i+=2)
回复 使用道具 举报
fantacyleo 发表于 2014-7-15 23:46
如果随便给3个数,说找出某个范围内同时能被这三个数整除的数,那就是“i%2==0&&i%3==0&&i%5==0”的思路了 ...

恩恩,其实我想说的就是最小公倍数这个问题。当时刚学了&&这个运算符,所有思路就聚焦到它的身上了,实际上我感觉最小公倍数要简单一些,呵呵。
回复 使用道具 举报
fantacyleo 发表于 2014-7-15 23:46
如果随便给3个数,说找出某个范围内同时能被这三个数整除的数,那就是“i%2==0&&i%3==0&&i%5==0”的思路了 ...

恩恩,这个思路很好,其实么,可以同时被2和5整除的数,个位数必定是0,那么也就是10的倍数,那么同时可以被10和3整除的数,必定是30的倍数,也就是说,for循环里面,循环变量自加2跨度太小了,完全可以自加30。

还有if判定也可以简化成 i%30==0
回复 使用道具 举报
OCTSJimmy 发表于 2014-7-16 08:12
恩恩,这个思路很好,其实么,可以同时被2和5整除的数,个位数必定是0,那么也就是10的倍数,那么同时可 ...

恩,这样做也很好。不过,这个三十的自加量是我们自己算出来的,如果数变得比现在大了而且多了,我们就不用自己再算出来了,或者说不用精确算出来就行,你说是吧?
回复 使用道具 举报
学习了 赞一个
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马