[問題] 大數乘冪問題

看板C_and_CPP (C/C++)作者 (Xa)時間14年前 (2011/12/13 23:39), 編輯推噓3(3012)
留言15則, 6人參與, 最新討論串1/1
先說我是高中生,第一次在這裡發文。雖然看過了十三戒,如有發言不當亦請告知。 我最近解過「無輸入,直接輸出 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

12/13 23:47, , 1F
沒仔細看,直覺是陣列越界或者是stack爆了
12/13 23:47, 1F

12/13 23:56, , 2F
同樓上 大多是SEG fault 用debug模式跑跑應該就知道了
12/13 23:56, 2F

12/14 00:02, , 3F
同樓上 應該是stack爆了在區域要了這麼多記憶體....
12/14 00:02, 3F

12/14 00:03, , 4F
可是 floor(log(7^86495))=73096,開 80000 OK吧
12/14 00:03, 4F

12/14 00:04, , 5F
而且題目提示有 70000 多位數
12/14 00:04, 5F

12/14 00:04, , 6F
int能塞九位數 不認為你需要開八萬 @@
12/14 00:04, 6F

12/14 00:05, , 7F
所以動態陣列也不夠歐
12/14 00:05, 7F
※ 編輯: xavier13540 來自: 125.229.163.252 (12/14 00:08)

12/14 00:44, , 8F
80000是可以啦(除非你跟我說你的記憶體只有8K....)
12/14 00:44, 8F

12/14 00:45, , 9F
只是你宣告的位置會有影響 再加上用inline(?)
12/14 00:45, 9F

12/14 00:46, , 10F
建議學一下debugger工具的使用,逐步偵錯之類的方式來找
12/14 00:46, 10F

12/14 00:53, , 11F
int f=figure(a),g=figure(b)+1,tmp[f][g]; = =....
12/14 00:53, 11F

12/14 00:55, , 12F
算到2048時 你要在inline裡開將近1.6*10^9大小int陣列...
12/14 00:55, 12F

12/14 01:53, , 13F
zerojudge xd....
12/14 01:53, 13F

12/14 06:06, , 14F
真想不出來再參考 http://codepad.org/nEegLzn9
12/14 06:06, 14F

12/17 22:24, , 15F
12/17 22:24, 15F
文章代碼(AID): #1Evt6NHy (C_and_CPP)
文章代碼(AID): #1Evt6NHy (C_and_CPP)