[問題] 基本大數加法

看板C_and_CPP作者 (疤痂灸)時間8年前 (2017/08/21 20:20), 編輯推噓1(1023)
留言24則, 5人參與, 最新討論串1/1
開發平台(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

08/21 20:40, , 1F
假設你做12345+67 找你這樣寫會變12345+???67 ?表示一
08/21 20:40, 1F

08/21 20:40, , 2F
個不知道的垃圾值
08/21 20:40, 2F

08/21 20:40, , 3F
*照你這樣寫
08/21 20:40, 3F

08/21 20:43, , 4F
變數沒有初始化 初值不會是0更不會是'0'
08/21 20:43, 4F

08/21 20:44, , 5F
另外進位似乎多加一次
08/21 20:44, 5F

08/21 20:45, , 6F
那要怎麼初始化呢 有點爬不到答案
08/21 20:45, 6F

08/21 20:47, , 7F
s大 c[i+1] +=1 想幫最高位+1 其他狀況應該不會多加
08/21 20:47, 7F

08/21 20:48, , 8F
char c[100]={'0'} 也不會對 QQ
08/21 20:48, 8F

08/21 20:51, , 9F
可用迴圈或memset 初始化語法好像只能手動填'0'
08/21 20:51, 9F

08/21 20:53, , 10F
真的!! 謝謝s大 :)
08/21 20:53, 10F

08/21 20:55, , 11F
但是輸入2999 1 會甚麼都沒有出現欸 QAQ
08/21 20:55, 11F

08/21 21:00, , 12F
仔細看這個做法還蠻有問題的 c中的0同時代表數字0及'\0'
08/21 21:00, 12F

08/21 21:00, , 13F
所以rev等函數的運作會出問題
08/21 21:00, 13F

08/21 21:02, , 14F
無法正確讀取數字長度 所以會亂掉
08/21 21:02, 14F

08/21 21:02, , 15F
大概知道問題點了 再改善程式看看 謝謝:D
08/21 21:02, 15F

08/22 02:03, , 16F
路過回個,順便提醒一下雖然初學的時候大數加法習慣
08/22 02:03, 16F

08/22 02:03, , 17F
上會以digit為單位,但是這樣每次只會處理到一位數
08/22 02:03, 17F

08/22 02:04, , 18F
,在效率上不夠優,熟悉之後建議可以int為單位,也
08/22 02:04, 18F

08/22 02:04, , 19F
就是一次以差不多10^10為單位,運算上會快很多
08/22 02:04, 19F

08/22 02:05, , 20F
然後也可以避免掉字串處理常出現的bug,只能說字元
08/22 02:05, 20F

08/22 02:06, , 21F
單位或int單位都各自有其優缺,可斟酌選擇
08/22 02:06, 21F

08/22 14:13, , 22F
是的! 多謝指教^^
08/22 14:13, 22F

08/28 23:55, , 23F

08/28 23:56, , 24F
網站寫得蠻詳細的喔
08/28 23:56, 24F
文章代碼(AID): #1Pcj0WrI (C_and_CPP)