作者tkcn (小安)
看板java
标题[问题] int i=... , u=... i<=u 与 (long)i<=u 结果不同!?
时间Tue May 18 13:39:38 2010
这是我在 ACM #10140 遇到的问题:
http://uva.onlinejudge.org/external/101/10140.html
下面是我的程式码(AC version):
http://gist.github.com/404654
---
下面我会把我有问题的部份抽出来,
所以即使不看题目和 code 也没有关系。
Scanner in = new Scanner(System.in);
int u = in.nextInt();
for(int i=l;(long)i<=u&&i>=0;i++){ // 拿掉 long 就会 WA
// ...
}
这份 code 目前已经 AC 了,
但我很仔细的试了很多次,
只要把 (long) 这转型拿掉,上传後就会得到 WA。
可是在我的认知里头,
i 和 u 从 int 强制转型成 long 并不会改变它们的值,
也就是说 i<=u 和 (long)i <= (long)u 应该会有完全相同的结果才对。
所以我想,如果不是我真的遇到什麽诡异的 bug,就是我有很严重的误解了。
---
这里额外对题目做一点补充,虽然我认为这也不会影响到结果才是。
u 的范围会在 2 ~ 2^31 -1 之间(正整数、且在 int 范围之内)
i 的起始值位於 1~u 之间。
如果 u = 2^31-1,那麽 i 在回圈的最後一次也会是 2^31 -1,
而下一次就会变成 -2^31,并且离开回圈。
以上是题目给的范围,我也自己写程式去验证过了,确实没有发现违反的情况。
请大家给点意见 Q_Q
谢谢 :p
--
◤ ◥ ◢ ◣
T$,修好它吧。 ⊙▁⊙─ ─⊙▂⊙ 碰到问题,用SoftICE就对了!
╰ ∕皿﹨ ◥皿◤ ╯
◥█◤◢ ◥ ︶◤
Lee ◤ ︶ ◥◤ ﹨▼∕◥ T$ Chen
MYTHBUGTERS ◥ ◤\◥ by dajidali
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.122.183.199
※ 编辑: tkcn 来自: 140.122.183.199 (05/18 13:40)
1F:推 PsMonkey:光看也是觉得很莫名,只能推荐你用 SoftICE 了 XD 05/18 13:50
2F:→ ogamenewbie:变成负的会离开吗? (思 05/18 13:51
3F:→ tkcn:会的,第二个条件是 i>=0,我自己也做了一些input测试没问题 05/18 13:53