看板 C_and_CPP 關於我們 聯絡資訊
先說我是高中生,第一次在這裡發文。雖然看過了十三戒,如有發言不當亦請告知。 我最近解過「無輸入,直接輸出 7^86495 的值」這個題目。因為執行時間被規定在 10 秒 內,我先將 86495 用小算盤做了二進位處理,讓電腦依序算出 7^(2^i) (0≦i≦16) 的值 ,再讓電腦算出題目所求。 這個程式碼如下: http://ideone.com/dxj3z 但是,就如大家所看到的,這個程式碼在執行時發生錯誤。我發現電腦只幫我算出 7^1024 的值,只要讓電腦算到 7^2048 以上就會當機(指陣列 exp7)。我把程式稍作修改,讓電 腦算出 7^1503 的值(此時電腦只需算到 7^1024),卻能完全無誤地得到答案: http://ideone.com/RdKMq 小弟不才,找了很久還是不知道錯誤之處,請版上各位幫忙。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 125.229.163.252
james732:沒仔細看,直覺是陣列越界或者是stack爆了 12/13 23:47
x000032001:同樓上 大多是SEG fault 用debug模式跑跑應該就知道了 12/13 23:56
firejox:同樓上 應該是stack爆了在區域要了這麼多記憶體.... 12/14 00:02
xavier13540:可是 floor(log(7^86495))=73096,開 80000 OK吧 12/14 00:03
xavier13540:而且題目提示有 70000 多位數 12/14 00:04
x000032001:int能塞九位數 不認為你需要開八萬 @@ 12/14 00:04
xavier13540:所以動態陣列也不夠歐 12/14 00:05
※ 編輯: xavier13540 來自: 125.229.163.252 (12/14 00:08)
firejox:80000是可以啦(除非你跟我說你的記憶體只有8K....) 12/14 00:44
firejox:只是你宣告的位置會有影響 再加上用inline(?) 12/14 00:45
james732:建議學一下debugger工具的使用,逐步偵錯之類的方式來找 12/14 00:46
firejox: int f=figure(a),g=figure(b)+1,tmp[f][g]; = =.... 12/14 00:53
firejox:算到2048時 你要在inline裡開將近1.6*10^9大小int陣列... 12/14 00:55
honamida:zerojudge xd.... 12/14 01:53
tropical72:真想不出來再參考 http://codepad.org/nEegLzn9 12/14 06:06
firejox:http://ideone.com/796r6 ..... 12/17 22:24