设计一个任意长的整数进行加法运算的演示程序

idlefish 2003-12-17 12:07:24
利用双向循环链表实现长整数的存储,每个结点含一个整型变量。任何整型变量的范围是-(2的十五次幂-1)--(2的十五次幂-1)。输入和输出形式:按中国对于长整数的表示习惯,每四位一组,组间用逗号搁开。
...全文
493 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
loewe 2004-01-03
  • 打赏
  • 举报
回复
这个问题和2003ICPC Beijing的Problem H:Powerful Calculator差不多嘛,前段时间我写过一个C的版本的,可是机器格过了什么都没了,如果你想要的话,我老师写过一个PASCAL版本的,我可以帮你去拿来看看,留个Email给我吧

我们做的都是用string来存储读取的长整数的,要转换成LinkList不难的,关键是你可以参考一下我们的方法,如果有帮助的话最好了
12s 2004-01-02
  • 打赏
  • 举报
回复
程序员追求什么? 解决具体问题?
我想是的 那么为什么还要转弯呢?
不过楼主的问题 我不能解决 Sorry!
idlefish 2003-12-30
  • 打赏
  • 举报
回复
这几天一直忙考试还没有做这个程序,我想请教一下关于进位问题,还有双向循环链表怎么实现啊(不好意思)
idlefish 2003-12-30
  • 打赏
  • 举报
回复
这几天一直忙考试,也没有做这个程序,不过你有没有想过关于进位问题?还有我想请教一下双向循环怎么实现啊?(不好意思)
Linevan 2003-12-22
  • 打赏
  • 举报
回复
要每个结点存四位的话,其实很好处理啊!
你先把两个要加的长整数对应结点先加起来!
然后对所得数进行位数处理!

从最小位到最高位,要是某一位的数,比如是a.data
要是a.data>10000(要是四位的话,)

{
a.next.data+=a.data/10000;
a.data=a.data%10000;
}
这样就可以做到在一个结点上保存4位数了!
既节约了空间内存,又能充分利用结点空间!

个人认为是个好方法!

至于源代码,相信楼主能自己写了,
要是还有问题,请拿出来大家一起讨论!
loewe 2003-12-22
  • 打赏
  • 举报
回复
要考虑正数和负数吗?
idlefish 2003-12-21
  • 打赏
  • 举报
回复
试编写递归算法,输出广义表中所有原子项及其所在层次。
NowCan 2003-12-17
  • 打赏
  • 举报
回复
这个要用链表来作?真是无聊。
用个数组简单的很,缺点就是不能处理任意大的数,但链表就行,也只是理论上的,实际应用中受内存限制。
所以,如果是你要作个大数运算的东西,最好根据具体情况来看,要通用,速度就慢,你想好了。
seefront1 2003-12-17
  • 打赏
  • 举报
回复
假如你们课程设计题目里有关于用 Dijkstra算法设计矩阵任意两点间的最短距离的题目的话,那么很有可能你跟我一个学校,同一年级。这样的话我会更加B4你!
seefront1 2003-12-17
  • 打赏
  • 举报
回复
你是哪个学校的啊?这很明显是期末课程设计,靠,想让别人做?去死吧!
Linevan 2003-12-17
  • 打赏
  • 举报
回复
就象newmeteor(圆缘)所说,不过如果要求是“双向循环链表”的话,可以把数组改成链表

这样就真正的是可以对任意长的整数进行加法运算,因为如果数多了位数就可以临时申请空间,不过要是位数很大的话,链表可能会很长,所以有个小小的建议:

每个结点不要只保留一位数,可以是两位,或更多,
也就是说要是1023324234242的话
可以这样保存:242-234-324-23-1(3位)
运算等等不变!
不过这样的话你输出时就要检验一下,要是不足3位,例如上面的23,输出就要是023。
希望对你的程序能有用!
newmeteor 2003-12-17
  • 打赏
  • 举报
回复




如果数字本身已经超出了计算机的表示范围的话,你可以用三个数组来表示,数组的长度有你决定,(如果学过c++的话可以用new动态创建数组,如果没有学过的话可以用#define maxlen 999(999表示你所用到的参加运算的数字的有多少位)定义任意你想要的位数)然后用两个数组存放你的两个大数,还有一个数组保存结果。数组的每一位用来存放你的大数的每一位(如:个位,十位,百位....),然后两个数组相加,
for (i=0;i<manlen;i++)//从0----maxlen依次保存大数的个,十,百....
c[i]=0;
for(i=0;i<maxlen;i++)
{
c[i]+=a[i]+b[i];
if(c[i]>=0)
{c[i]=c[i]-10;c[i+1]=1;}
for (i=maxlen;i>=0:i--;)
print("%f",c[i]);

希望这个短小的核心算法对你有所启示,我就满足了!相信其他的部分你可以自己完善了!






33,008

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧