#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