码迷,mamicode.com
首页 > 编程语言 > 详细

关于C语言实现大整数减法的修正

时间:2015-01-07 15:15:50      阅读:201      评论:0      收藏:0      [点我收藏+]

标签:大整数的算术运算

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

本文出自 “丁志新的博客” 博客,请务必保留此出处http://dzx1992.blog.51cto.com/9403226/1600063

关于C语言实现大整数减法的修正

标签:大整数的算术运算

原文地址:http://dzx1992.blog.51cto.com/9403226/1600063

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!