在北京航空航天大學出版社出版的丁海軍老師主編的《程序設計基礎(C語言)》第236頁,我看到了一個大整數減法的的算法實現,試驗了這樣一組數據:
as="99999";bs="100004";
結果:
rs=-1&1&5
請按任意鍵繼續. . .
多次調試,我發現了一個問題:
當需要向高位借一時,如果高位爲零,那麼高位做減一操作,高位存儲的ASCII值就變成了255,這樣,接下來的運算就向着我不能預知的方向發展了。於是,我在修改了處理錯位時的代碼:
else //a<b,則b-a { for(i=0;i<maxlen;i++) if(b[i]<a[i]) { if(b[i+1]==0) { p=0; while(b[++p+i]==0); b[i+p]--; while(--p) b[i+p]=9; } else b[i+1]--; b[i]+=10; r[i]=b[i]-a[i]; } else r[i]=b[i]-a[i]; }
這樣程序終於可以正確運行了:
結果:
rs=-5
請按任意鍵繼續. . .