超长整数加法的C++实现

flexitime 2004-10-17 05:27:00
昨天一友人说其数据结构的老师出了个题目,问我是否能帮忙一下,我看一下题目,觉得很有趣,于是用C++(她要求要用C/C++,我本来很想用Object Pascal)写了这个程序,有兴趣的朋友就看看,顺便看看有没有虫虫。
题目:长整数四则运算。
问题描述:设计一个实现任意长的整数进行加法运算的演示程序。
基本要求:利用双向循环链表实现长整数的存储,每个结点含一个整形变量。任何整形变量的范围是 -(2^15 - 1)~ (2^15 - 1)。输入和输出形式:按中国对于长整数的表示习惯,每四位一组,组间用逗号隔开。
测试数据:
(1)0+0;应输出“0”。
(2)-2345,6789+-7654,3211;应输出“-1,0000,0000”。
(3)-9999,9999+1,0000,0000,0000;应输出“9999,0000,0001”。
(4)1,0001,0001+-1,0001,0001;应输出“0”。
...全文
836 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
kerbcurb 2004-10-25
  • 打赏
  • 举报
回复
http://community.csdn.net/Expert/topic/3275/3275755.xml?temp=.3900263
http://community.csdn.net/Expert/topic/3150/3150200.xml?temp=.8238184
http://community.csdn.net/Expert/topic/3208/3208757.xml?temp=.2973749
http://community.csdn.net/Expert/topic/3206/3206982.xml?temp=.4681513
http://community.csdn.net/Expert/topic/3276/3276131.xml?temp=.3825647
flexitime 2004-10-24
  • 打赏
  • 举报
回复
今天又去帮人写了个“迷宫问题”,无时间按时完成这个程序。
yindesheng 2004-10-24
  • 打赏
  • 举报
回复
to Jeffsan(阿云)

这说明你的程序写的太长了
干吗不用stl,c++标准库涅?
如果用stl,c++标准库是怎么做的,能否写一下代码?
谢谢!
---------------------------------------
用 stl 的 vector 做,很容易的。
renheihei 2004-10-24
  • 打赏
  • 举报
回复
找找以前的贴子,很多类似的
kerbcurb 2004-10-24
  • 打赏
  • 举报
回复
除法,我在数据结构版有一些代码,10进制的,你可以去看看,乘法的也有,加碱法较容易,那里是经常讨论这些东西的地方
Wolf0403 2004-10-24
  • 打赏
  • 举报
回复
用链表表示数位,不如用数组吧……不过重新分配什么的,有点麻烦。
flexitime 2004-10-23
  • 打赏
  • 举报
回复
是,正如 kerbcurb兄说的那样,我也是大概这样去实现乘法的,只是步长不是10。
flexitime 2004-10-23
  • 打赏
  • 举报
回复
除法的话,真的要做我想可以真的当成是一个一个数字那样模拟笔算来算。但有没有更好的方法,我一直在找,前两天回顾地看一下《计算机组成原理》,里面有二进制的定点/浮点数的算法,看来挺合适的,只是最后由二进制变回十进制时,十分困难。现在还未想好。
kerbcurb 2004-10-23
  • 打赏
  • 举报
回复
乘法用多项式乘法,比如假设X代表进制(10、100、1000、10000、。。。进制),那么一个数可以表示为关于X的多项式(系数),两个数相乘可以用两个多项式相乘代表,乘积就是两个多项式乘积的系数。
flexitime 2004-10-23
  • 打赏
  • 举报
回复
什么算法?我也写了一个,不过是用Object Pascal写的,用的是类似于List的方式来存数据,与我这个程序差不多的方式。
willko 2004-10-23
  • 打赏
  • 举报
回复
乘法我实现了,但是我的算法效率太低,除法我还没有头绪。
大家要的话我下个星期贴出来让大家参考参考
flexitime 2004-10-23
  • 打赏
  • 举报
回复
昨晚用Object Pascal重写这个程序时发现了一个小错误,在ReCalc()函数中
......
if (FList->GetCurrentNode()->Data * flag > 10000)
{
FList->GetCurrentNode()->Data -= flag * 10000;
plus = true;
}else if (FList->GetCurrentNode()->Data * flag < 0)
......
应改为
if (FList->GetCurrentNode()->Data * flag >= 10000)
{
FList->GetCurrentNode()->Data -= flag * 10000;
plus = true;
}else if (FList->GetCurrentNode()->Data * flag < 0)

漏了等于的情况。
  • 打赏
  • 举报
回复
算法版太多了,不过我只用 cryptlib 的 Integer.
Jeffsan 2004-10-18
  • 打赏
  • 举报
回复
这说明你的程序写的太长了
干吗不用stl,c++标准库涅?
如果用stl,c++标准库是怎么做的,能否写一下代码?
谢谢!
K_BUKER 2004-10-18
  • 打赏
  • 举报
回复
如果贴出来的话别忘了跟小弟说一声哦!
flexitime 2004-10-17
  • 打赏
  • 举报
回复
正在想,有时间就会写的,不过我想我会用Object Pascal来写,到时可能不贴在这个版上了,哈哈
K_BUKER 2004-10-17
  • 打赏
  • 举报
回复
呵呵 上面这位师兄所言及是啊!!
这个程序我在上高一的时候参加全国青少年奥林匹克信息学竞赛时老师曾出过这个题目当练习,是用Pascal写的,但也只是加减法,但对于乘法,老师只是做了一点提示,当时没人做得出来,不知哪位师兄有没有兴趣做做。
flexitime(我喜欢写程序)兄,有没有兴趣看看阿??
OSNC_17 2004-10-17
  • 打赏
  • 举报
回复 1
你们老师出这样的题目真是难为你们了,
中国的教育啊!
学生勤,老师懒;
学生懒,老师勤;
要不两个都懒。

jp1984 2004-10-17
  • 打赏
  • 举报
回复
string 读入
模拟笔算就行
flexitime 2004-10-17
  • 打赏
  • 举报
回复
我当然知道用stl的标准库,但别人是数据结构的作业,总不能用现成的东西,不然会过不了关的。嘻嘻!
加载更多回复(4)

64,682

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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