C語言實現大整數減法

在北京航空航天大學出版社出版的丁海軍老師主編的《程序設計基礎(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
請按任意鍵繼續. . .

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章