java puzzlers
joenqc
这个作者很懒,什么都没留下…
展开
-
谜题1:奇偶性
以下为一个判断int类型变量是否为奇数的方法public static boolean isOdd(int i) { return i % 2 == 1;}存在的问题:当i为负奇数时,方法返回的结果错误。对于java中的%运算符,满足以下等式: (a / b) * b + (a % b) == a也就是说,表达式 a%b结果的符号永远与a相同。因此当a为负奇数时,a%2的结果为-1。原创 2017-08-02 22:46:02 · 293 阅读 · 0 评论 -
谜题2:Time for a change 找零时刻
public class Change { public static void main(String args[]) { System.out.println(2.00 - 1.10); }}以上结果并不会输出0.9,而输出0.8999999999999999。问题在于 并不是所有的小数都可以用二进制浮点数精确表示,二进制浮点对于货币计算是非常不合适的。解决方法原创 2017-08-02 23:14:28 · 266 阅读 · 0 评论 -
谜题3:Long Division 长整除
public class LongDivision { public static void main(String[] args) { final long MICROS_PER_DAY = 24 * 60 * 60 * 1000 * 1000; final long MILLIS_PER_DAY = 24 * 60 * 60 * 1000;原创 2017-08-02 23:31:01 · 979 阅读 · 0 评论 -
谜题4:It's Elementary 初级问题
public class Elementary { public static void main(String[] args) { System.out.println(12345 + 5432l); }}看起来输出66666,结果程序运行起来发现输出的17777。问题在于第二个操作数是long类型的5432,而不是54321。由于1和小写的l非常相似,导致代码阅原创 2017-08-02 23:37:02 · 270 阅读 · 0 评论