推 Zero0910: stack空間不夠你放這麼大的陣列啦 請用new/delete去配置 07/18 17:57
→ Zero0910: 記憶體空間 07/18 17:57
推 Zero0910: 置底十三誡第10點 07/18 18:00
感謝! 雖然stack空間這詞對我很陌生,等會試試看利用動態陣列!
改正過後變成這樣 http://ideone.com/SFFUMe
編譯器可以過了~
但是ZeroJudge 還是過不了!! 是因為測資的記憶體限制嗎? 這又能如何克服?
錯誤訊息為:
系統呼叫了 abort 函式!
terminate called after throwing an instance of 'std::bad_alloc'
what(): std::bad_alloc
Aborted (core dumped)
補上題目:
https://zerojudge.tw/ShowProblem?problemid=d283
推 Yshuan: 你只需要N-2跟N-1去算第N項 從0到N-3的空間根本不用 07/18 19:37
推 remizu: bad_alloc exception是new失敗所產生的 通常是要太多 07/18 19:41
→ remizu: 記憶體 改用Y大的方法就可以解決 07/18 19:42
推 moebear: 我建議做二維動態陣列new一次 然後把它截成二維的樣子 07/18 19:43
感謝幾位熱心的回復! 但小弟資質駑鈍一時還無法了解 Orz
像Y大說 只利用 N-2跟N-1項去算第N項? 但不是還得先算出 N-1跟 N-2項?
然要算 N-1項又要先算 N-2 N-3,不是等於全部都要算一次嗎XD
看來我需要冷靜一下 先吃個飯 晚點繼續研究~
→ moebear: 前面的丟掉會算太久吧 07/18 20:25
→ Littlechozy: F20000不超過6000位,如果用1個int表示10000,一個數 07/18 21:09
→ Littlechozy: 要1200個int,以記憶體有500MB來看,可以算看看 07/18 21:11
最後試了以下幾點修正:
1.修改了陣列類型為long long (用10^18進位讓陣列能儲存更多位數減少宣告位數W?)
2.進位部分補上之前漏掉的等號(行31)
3.Output部分第二項開始加上數字前必須補'0'(行50)
題目:
https://zerojudge.tw/ShowProblem?problemid=d283
歷經千辛萬苦最終版本 http://ideone.com/qHosrs 終於通過測試!
這題讓我學到了不少觀念 謝謝各位指導~ 也歡迎提供更有效的做法 <(__)>
※ 編輯: ddchris (60.245.65.179), 07/19/2017 11:18:13