首页 > 代码库 > 关于C语言实现大整数减法的修正
关于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
请按任意键继续. . .
本文出自 “丁志新的博客” 博客,请务必保留此出处http://dzx1992.blog.51cto.com/9403226/1600063
关于C语言实现大整数减法的修正
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。