[問題] int i,u; i<=u 與 (long)i<u 結果不同
這是我在 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)
推
05/18 13:50, , 1F
05/18 13:50, 1F
→
05/18 13:51, , 2F
05/18 13:51, 2F
→
05/18 13:53, , 3F
05/18 13:53, 3F
討論串 (同標題文章)
以下文章回應了本文:
完整討論串 (本文為第 1 之 5 篇):