[問題] int i,u; i<=u 與 (long)i<u 結果不同

看板java作者 (小安)時間15年前 (2010/05/18 13:39), 編輯推噓1(102)
留言3則, 3人參與, 最新討論串1/5 (看更多)
這是我在 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
光看也是覺得很莫名,只能推薦你用 SoftICE 了 XD
05/18 13:50, 1F

05/18 13:51, , 2F
變成負的會離開嗎? (思
05/18 13:51, 2F

05/18 13:53, , 3F
會的,第二個條件是 i>=0,我自己也做了一些input測試沒問題
05/18 13:53, 3F
文章代碼(AID): #1ByYWTlc (java)
討論串 (同標題文章)
文章代碼(AID): #1ByYWTlc (java)