设计一个程序实现两个任意长的整数的求和运算.基本要求:利用双向循环链表,设计一个实现任意长的整数进行加法运算的演示程序.要求输入和输出每四位一组,组间用逗号隔开.如:1,0000,0000
来源:学生作业帮助网 编辑:作业帮 时间:2024/07/04 06:03:49
![设计一个程序实现两个任意长的整数的求和运算.基本要求:利用双向循环链表,设计一个实现任意长的整数进行加法运算的演示程序.要求输入和输出每四位一组,组间用逗号隔开.如:1,0000,0000](/uploads/image/z/6843620-20-0.jpg?t=%E8%AE%BE%E8%AE%A1%E4%B8%80%E4%B8%AA%E7%A8%8B%E5%BA%8F%E5%AE%9E%E7%8E%B0%E4%B8%A4%E4%B8%AA%E4%BB%BB%E6%84%8F%E9%95%BF%E7%9A%84%E6%95%B4%E6%95%B0%E7%9A%84%E6%B1%82%E5%92%8C%E8%BF%90%E7%AE%97.%E5%9F%BA%E6%9C%AC%E8%A6%81%E6%B1%82%EF%BC%9A%E5%88%A9%E7%94%A8%E5%8F%8C%E5%90%91%E5%BE%AA%E7%8E%AF%E9%93%BE%E8%A1%A8%2C%E8%AE%BE%E8%AE%A1%E4%B8%80%E4%B8%AA%E5%AE%9E%E7%8E%B0%E4%BB%BB%E6%84%8F%E9%95%BF%E7%9A%84%E6%95%B4%E6%95%B0%E8%BF%9B%E8%A1%8C%E5%8A%A0%E6%B3%95%E8%BF%90%E7%AE%97%E7%9A%84%E6%BC%94%E7%A4%BA%E7%A8%8B%E5%BA%8F.%E8%A6%81%E6%B1%82%E8%BE%93%E5%85%A5%E5%92%8C%E8%BE%93%E5%87%BA%E6%AF%8F%E5%9B%9B%E4%BD%8D%E4%B8%80%E7%BB%84%2C%E7%BB%84%E9%97%B4%E7%94%A8%E9%80%97%E5%8F%B7%E9%9A%94%E5%BC%80.%E5%A6%82%EF%BC%9A1%2C0000%2C0000)
设计一个程序实现两个任意长的整数的求和运算.基本要求:利用双向循环链表,设计一个实现任意长的整数进行加法运算的演示程序.要求输入和输出每四位一组,组间用逗号隔开.如:1,0000,0000
设计一个程序实现两个任意长的整数的求和运算.
基本要求:利用双向循环链表,设计一个实现任意长的整数进行加法运算的演示程序.要求输入和输出每四位一组,组间用逗号隔开.如:1,0000,0000,0000,0000.
谁能和我说说思想是什么?
数据结构课程设计,要用C编写,
设计一个程序实现两个任意长的整数的求和运算.基本要求:利用双向循环链表,设计一个实现任意长的整数进行加法运算的演示程序.要求输入和输出每四位一组,组间用逗号隔开.如:1,0000,0000
1.只考虑都是正数的情况,比较简单.
循环连别的节点这样定义:
struct Node{
int data;
Node * next;
Node * pre};
每个节点只保存小于10000的四位数,当两个长整数(也就是两个循环链表)相加的时候,
假设链表从低位到高位每四位保存到一个节点,那么就模拟加法的进位过程,两个链表的
对应节点相加,如果超过10000就向下一个节点进位,本节点只保留余数.
需要注意的是如果最后相加超过了最长链表的长度,加法的结果链表需要增加一个节点.
2.如果考虑加法的操作数有负数,设计要麻烦一些.
这个时候头结点要另外设计:
struct SNode{
char symbol;
Node * next;
Node * pre;}; 中间节点同上.
如果两个都是负数,可以调用1中的方法相加,但是最后结果要取负数,也就是symbol='-'.
如果一正一负,可以重新设计一个减法借位的过程,不过还有一个更好的方法.
联想到计算机中对负数加法的操作,使用了取补相加的方法.
我们可以借鉴这种思想,取(两个数中最长位数+1)为模.将负数链表每个节点取反(每个节点的模为10000,等效于9999-原值)再加一,然后把两个链表用1中的进位方法相加,如果结果中最后一个节点产生了进位,那么结果为正数,除了头结点置正无需再加额外操作.如果结果中最后一个节点没有进位,那么结果是负数,需要将头节点symbol置于负,并将链表每位取反再加一.