天天看點

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];
 }      

繼續閱讀