×
解除綁定,重新設定系統帳號的密碼
您的系統帳號 ID:
您的系統帳號:
您的帳號暱稱:
設定新密碼:
設定新密碼:
×
請輸入要加入的「課程代碼」
請向開設課程的使用者索取「課程代碼」
分類題庫
解題動態
排行榜
討論區
競賽區
登入
註冊
發表新討論
解題報告
#29731: c語言除法講述解題方向
krameri120
(科科)
學校 : 國立臺南高級工業職業學校
編號 : 102318
×
傳送站內訊息
傳給:
主題:
內容:
來源 : [1.173.159.232]
最後登入時間 :
2024-06-06 10:31:47
a021.
大數運算
| From: [27.242.197.30] | 發表日期 : 2022-03-26 18:22
對c語言來講,除法本身不好做,但你可以這樣想,比如21/5,
那會是21 - 5 - 5 - 5 - 5餘1,
這樣須做4次,210 / 5就會需要42次減5的時間複雜度,
而你可以這樣想,你對除數補0,變成210 / 500 補到一樣多位數,而你發現這樣除數會大於被除數時,
再將除數的最後一位扣掉變成'\0',則變成210 - 50,這時就會只需要做到4次,210 - 50 - 50 - 50 ,
則下一次得到10 / 50 ,再將除數扣最後一位(切記,除數不能扣超過原本的除數位數),那你會需要再做2次10 /5 -> 10 - 5 - 5,
把你所算的存到陣列的第n位,210 - 50(四次)存在一個陣列的第0位,發現不能減,下一筆10 - 5 的資料存在陣列的第1位,
此時你會發現list[0]存了四次,list[1]存了兩次,最後餘0,你把陣列印出來,就會是42正確結果。
你補零的行為可以透過strcat(array,"0")做,
判斷大小可以先從字串長度strlen(array)優先判斷,再來是透過strcmp去做相同長度兩個字串陣列比大小(include<string.h>)
小數也是相同作法
ZeroJudge Forum