[問題] 大數運算連續輸入問題

作者: laiDark (煎餃加賴)   2015-04-12 00:39:56
開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
Code Block
寫了一個可以簡易運算 大數 的code
功能只有 + - * 且 還沒有處理負數的功能
一開始寫的版本 只能執行一次運算後 結束
功能都可以正常運行
加法:http://ppt.cc/993H
減法:http://ppt.cc/od1e
乘法:http://ppt.cc/mt~m
一旦我改成可以連續輸入 乘法功能就怪怪的
http://ppt.cc/yY8Y
可以看到 除了第一次輸入的乘法功能正常 其他乘出來結果都是錯的
(+ - 兩個正常)
還有的時候 第一次輸入 就當掉.....
原始 code : http://codepad.org/v3HK3FCx
連續輸入code : http://codepad.org/El9HSAtS
兩者只差 184行的 while(1) 迴圈
簡單說明一下 code :
4~23行 配合 190行輸入 因為不知道會輸入多大的資料 所以我就用malloc
24~63 加法的函式
64~100 減法的函式
102~160 乘法的函式
161~179 將結果印出來的函式
196~207 防呆
(or 194~205)
我處理乘法的辦法: 假設要算的是
123456789 * 21 好了
我先將 123456789 從右到左開始算 所以我先分出9 8 7 6 5 4 3 2 1
轉成數字存入 num0 一樣也是右到左 所以num[0] = 1 num[1] = 2 這樣
接下來再切21 分出 1 轉成數字後 再去相乘 num0的每個數字
放入專存結果的陣列 再算2 與1乘出來的結果相加
最後在一次進位
主要概念是參考這個 http://ppt.cc/kxmB
我自己有嘗試印出值 看過程
但我不懂為何印出很大的數字
(9*9最大也才81 怎麼可能乘出84571 諸如此類的數字)
還麻煩各位大大 幫忙找出問題所在
是我邏輯錯誤 ?函式寫錯?想的不夠周全?
作者: a90310609 (越來越~胖!)   2015-04-12 21:41:00
全部的memset的size不對,多乘sizeof(int)

Links booklink

Contact Us: admin [ a t ] ucptt.com