看板 C_and_CPP 關於我們 聯絡資訊
開發平台(Platform): (Ex: Win10, Linux, ...) win7 編譯器(Ex: GCC, clang, VC++...)+目標環境(跟開發平台不同的話需列出) dev c++ 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) 問題(Question): 小弟初學C語言,實作基本的大數加法,得出錯誤後想了很久還是沒有頭緒哪裡錯 rev函數將字串反轉 minus 和 add 將字串裡的資料減或加 '0' 再運算 還請大神們指點迷津 餵入的資料(Input): 兩正整數 預期的正確結果(Expected Output): 相加的數字 錯誤結果(Wrong Output): 有時是亂碼,大部分數字錯誤 程式碼(Code):(請善用置底文網頁, 記得排版) http://codepad.org/GDrFZFxD 補充說明(Supplement): -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 61.223.187.165 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1503318048.A.D52.html
jerryh001: 假設你做12345+67 找你這樣寫會變12345+???67 ?表示一 08/21 20:40
jerryh001: 個不知道的垃圾值 08/21 20:40
jerryh001: *照你這樣寫 08/21 20:40
stucode: 變數沒有初始化 初值不會是0更不會是'0' 08/21 20:43
stucode: 另外進位似乎多加一次 08/21 20:44
wayne4125: 那要怎麼初始化呢 有點爬不到答案 08/21 20:45
wayne4125: s大 c[i+1] +=1 想幫最高位+1 其他狀況應該不會多加 08/21 20:47
wayne4125: char c[100]={'0'} 也不會對 QQ 08/21 20:48
stucode: 可用迴圈或memset 初始化語法好像只能手動填'0' 08/21 20:51
wayne4125: 真的!! 謝謝s大 :) 08/21 20:53
wayne4125: 但是輸入2999 1 會甚麼都沒有出現欸 QAQ 08/21 20:55
stucode: 仔細看這個做法還蠻有問題的 c中的0同時代表數字0及'\0' 08/21 21:00
stucode: 所以rev等函數的運作會出問題 08/21 21:00
wayne4125: 無法正確讀取數字長度 所以會亂掉 08/21 21:02
wayne4125: 大概知道問題點了 再改善程式看看 謝謝:D 08/21 21:02
alan23273850: 路過回個,順便提醒一下雖然初學的時候大數加法習慣 08/22 02:03
alan23273850: 上會以digit為單位,但是這樣每次只會處理到一位數 08/22 02:03
alan23273850: ,在效率上不夠優,熟悉之後建議可以int為單位,也 08/22 02:04
alan23273850: 就是一次以差不多10^10為單位,運算上會快很多 08/22 02:04
alan23273850: 然後也可以避免掉字串處理常出現的bug,只能說字元 08/22 02:05
alan23273850: 單位或int單位都各自有其優缺,可斟酌選擇 08/22 02:06
wayne4125: 是的! 多謝指教^^ 08/22 14:13
ddchris: 可參考 http://www.tcgs.tc.edu.tw/~sagit/cpp/q10.htm 08/28 23:55
ddchris: 網站寫得蠻詳細的喔 08/28 23:56