作者wayne4125 (疤痂灸)
看板C_and_CPP
標題[問題] 基本大數加法
時間Mon Aug 21 20:20:45 2017
開發平台(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://webptt.com/m.aspx?n=bbs/C_and_CPP/M.1503318048.A.D52.html
1F:→ jerryh001: 假設你做12345+67 找你這樣寫會變12345+???67 ?表示一 08/21 20:40
2F:→ jerryh001: 個不知道的垃圾值 08/21 20:40
3F:→ jerryh001: *照你這樣寫 08/21 20:40
4F:→ stucode: 變數沒有初始化 初值不會是0更不會是'0' 08/21 20:43
5F:→ stucode: 另外進位似乎多加一次 08/21 20:44
6F:→ wayne4125: 那要怎麼初始化呢 有點爬不到答案 08/21 20:45
7F:→ wayne4125: s大 c[i+1] +=1 想幫最高位+1 其他狀況應該不會多加 08/21 20:47
8F:→ wayne4125: char c[100]={'0'} 也不會對 QQ 08/21 20:48
9F:→ stucode: 可用迴圈或memset 初始化語法好像只能手動填'0' 08/21 20:51
10F:→ wayne4125: 真的!! 謝謝s大 :) 08/21 20:53
11F:→ wayne4125: 但是輸入2999 1 會甚麼都沒有出現欸 QAQ 08/21 20:55
12F:→ stucode: 仔細看這個做法還蠻有問題的 c中的0同時代表數字0及'\0' 08/21 21:00
13F:→ stucode: 所以rev等函數的運作會出問題 08/21 21:00
14F:→ wayne4125: 無法正確讀取數字長度 所以會亂掉 08/21 21:02
15F:→ wayne4125: 大概知道問題點了 再改善程式看看 謝謝:D 08/21 21:02
16F:推 alan23273850: 路過回個,順便提醒一下雖然初學的時候大數加法習慣 08/22 02:03
17F:→ alan23273850: 上會以digit為單位,但是這樣每次只會處理到一位數 08/22 02:03
18F:→ alan23273850: ,在效率上不夠優,熟悉之後建議可以int為單位,也 08/22 02:04
19F:→ alan23273850: 就是一次以差不多10^10為單位,運算上會快很多 08/22 02:04
20F:→ alan23273850: 然後也可以避免掉字串處理常出現的bug,只能說字元 08/22 02:05
21F:→ alan23273850: 單位或int單位都各自有其優缺,可斟酌選擇 08/22 02:06
22F:→ wayne4125: 是的! 多謝指教^^ 08/22 14:13
24F:→ ddchris: 網站寫得蠻詳細的喔 08/28 23:56