在北京航空航天大学出版社出版的丁海军老师主编的《程序设计基础(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
请按任意键继续. . .