设计一个程序实现两个任意长的整数的求和运算.

学习 时间:2026-03-31 18:29:29 阅读:12
设计一个程序实现两个任意长的整数的求和运算.基本要求:利用双向循环链表,设计一个实现任意长的整数进行加法运算的演示程序.要求输入和输出每四位一组,组间用逗号隔开.如:1,0000,0000,0000,0000.谁能和我说说思想是什么?数据结构课程设计,要用C编写,

最佳回答

文静的天空

危机的往事

2026-03-31 18:29:29

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置于负,并将链表每位取反再加一。

最新回答共有2条回答

  • 复杂的石头
    回复
    2026-03-31 18:29:29

    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置于负,并将链表每位取反再加一。

上一篇 catch my breath-kelly clarkson的中文歌词

下一篇 |sin(x-y)|脱掉绝对值符号怎么计算噢,0小于等于x小于等于y小于等于2pai,可知0