[問題] 奇怪的現象?-同份code, C++能過,C不能過

看板C_and_CPP作者 (炸彈貓)時間13年前 (2012/05/13 19:59), 編輯推噓4(4023)
留言27則, 7人參與, 最新討論串1/2 (看更多)
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) ZeroJudge online judgement 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) 問題(Question): d923. 規律 http://zerojudge.tw/ShowProblem?problemid=d923 大致做法就是把區域切成四大塊,每一塊增加的值都是可以算先好的 所以不必每格都算過,遞迴一直切下去。 但卻發生奇怪的現象... 同份code, C++能過,C不能過 原本我猜是型態傳換的問題 後來全部換成 unsigned long long int 還是一樣C過不了 (大哭 有人可以告訴我為什麼嗎? 餵入的資料(Input): 預期的正確結果(Expected Output): 錯誤結果(Wrong Output): 程式碼(Code):(請善用置底文網頁, 記得排版) http://ideone.com/E3WZ7 補充說明(Supplement): -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 123.205.55.3 ※ 編輯: BombCat 來自: 123.205.55.3 (05/14 04:00)

05/14 04:08, , 1F
http://ideone.com/WPPTq 同份 Code,該網站編譯通過呀(C)
05/14 04:08, 1F

05/14 04:08, , 2F
c語言的 math.h 和 c++ 的 cmath 提供之函式不盡相同,
05/14 04:08, 2F

05/14 04:11, , 3F
.. 請忽略推文 .. 問題似乎還不在這..
05/14 04:11, 3F

05/14 04:11, , 4F
@c大:可是ZJ答案是錯的 @E大:我是都是用math.c
05/14 04:11, 4F

05/14 04:26, , 5F
TLE.. 真妙..
05/14 04:26, 5F

05/14 04:27, , 6F
換種寫法, 把 recursive 拿掉, 另還用不到 ull, 改這二個
05/14 04:27, 6F

05/14 04:27, , 7F
應可快不少。
05/14 04:27, 7F

05/14 04:28, , 8F
( long long 似乎還是必要的.. )
05/14 04:28, 8F

05/14 04:30, , 9F
@E大: 所以問題在遞迴上?
05/14 04:30, 9F

05/14 04:34, , 10F
不很確定,另外我其實很好奇,math.h裡面之函式有支援log2 ?
05/14 04:34, 10F

05/14 04:36, , 11F
看起來至少gcc有 (我想是自己extendsion的吧
05/14 04:36, 11F

05/14 04:53, , 12F
@E大,c大:謝謝你們的幫忙,我要去睡了
05/14 04:53, 12F

05/14 05:12, , 13F
你寫的時候記得開 -Wall 然後會發現"並不是所有路徑都
05/14 05:12, 13F

05/14 05:14, , 14F
有回傳值"
05/14 05:14, 14F

05/14 05:16, , 15F
沒有 return 又要函式生東西來給你, 結果是未知的, 加
05/14 05:16, 15F

05/14 05:18, , 16F
上它又是遞迴的條件, TLE/WA 是當然的
05/14 05:18, 16F

05/14 05:19, , 17F
真妙.. 我還一直在 math.h ceil 這裡面打轉(覺得有捨位誤)
05/14 05:19, 17F

05/14 08:33, , 18F
我是沒開啦~ 看到 if 沒看到 else 一定有古怪
05/14 08:33, 18F
謝謝版上的各位大大的幫忙,我找到錯誤了 用一個簡單的loop計算,去取代 Exp=(unsigned long long int)pow(2,ceill(log2(Len))); 這一行 就可以讓C也可以過了。 不過還是不知道為什麼之前版本會讓C過不了? 真的好奇是什麼原因造成的 要不然哪天寫到一個會爆的C程式還蠻抖的... AC code: http://ideone.com/WnFuw 謝謝c大,E大還有l大 ※ 編輯: BombCat 來自: 123.205.55.3 (05/14 09:49)

05/14 09:52, , 19F
我猜的,pow 回傳 double,精度已不能滿足 ull .
05/14 09:52, 19F

05/14 10:00, , 20F
有可能,畢竟浮點數有些數只能近似
05/14 10:00, 20F

05/14 10:01, , 21F
不過C++居然正常,難到他們用的lib不一樣?
05/14 10:01, 21F

05/14 10:04, , 22F
我所知是不一樣沒錯。不過這例要確信原因,可能要花點時間
05/14 10:04, 22F

05/14 10:04, , 23F
再推導驗證。
05/14 10:04, 23F

05/14 10:09, , 24F
感謝E大的意見
05/14 10:09, 24F

05/14 13:12, , 25F
很多語法關鍵字C都沒有 像之前才發現C沒有bool
05/14 13:12, 25F

05/14 13:54, , 26F
C++有overload long double的版本,C的對應是powl不是pow
05/14 13:54, 26F

05/14 19:35, , 27F
應該是linking時找的lib不一樣吧
05/14 19:35, 27F
文章代碼(AID): #1Fi1Ai-3 (C_and_CPP)
文章代碼(AID): #1Fi1Ai-3 (C_and_CPP)