黑马程序员技术交流社区

标题: 被某些数同时整除的表达方式 [打印本页]

作者: 依然超级赛亚人    时间: 2014-7-15 23:25
标题: 被某些数同时整除的表达方式
本帖最后由 依然超级赛亚人 于 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”的吗?有其他的表达方式吗?发表你们的看法。
其实单纯就整除这个知识点来说,这是一个小学数学上的问题,当时只想到上面的代码,回过头来跳出编程这个问题,感觉有时我们想问题确实复杂了一点。
作者: fantacyleo    时间: 2014-7-15 23:46
如果随便给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)
作者: 依然超级赛亚人    时间: 2014-7-16 07:58
fantacyleo 发表于 2014-7-15 23:46
如果随便给3个数,说找出某个范围内同时能被这三个数整除的数,那就是“i%2==0&&i%3==0&&i%5==0”的思路了 ...

恩恩,其实我想说的就是最小公倍数这个问题。当时刚学了&&这个运算符,所有思路就聚焦到它的身上了,实际上我感觉最小公倍数要简单一些,呵呵。
作者: OCTSJimmy    时间: 2014-7-16 08:12
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
作者: 依然超级赛亚人    时间: 2014-7-16 08:40
OCTSJimmy 发表于 2014-7-16 08:12
恩恩,这个思路很好,其实么,可以同时被2和5整除的数,个位数必定是0,那么也就是10的倍数,那么同时可 ...

恩,这样做也很好。不过,这个三十的自加量是我们自己算出来的,如果数变得比现在大了而且多了,我们就不用自己再算出来了,或者说不用精确算出来就行,你说是吧?
作者: 嘻嘻哈哈嘻嘻    时间: 2014-7-16 08:48
学习了 赞一个




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2