求编程:实现两个长整数相加:要求用链表(单链表或双向链表)实现两个任意数的整数相加。

把注解,设计思路也写一些吧

楼主你好

设计思路:
先在函数Creat_List中用头插入法创建一个表示大数的链表 因为用头插入法方便大数相加
(例如:123 456 用头插入法插入的时候 遍历的序列为:3、2、1 也就是低位先遍历)

然后在函数Add_Big_Num中用头插入法创建大数之和sum

具体代码如下:
#include<stdio.h>
#include<stdlib.h>

typedef struct node
{
int data;
struct node *next;
}Big_Num;

void Creat_List(Big_Num * &h)//创建一个大数
{
Big_Num *p;
char ch;
int e;

h->next=NULL;//头结点指针域先置空

while((ch=getchar())!='\n')
{
p=(Big_Num *)malloc(sizeof(Big_Num));
e=(int)ch - 48;//(int)ch 是强制转换 就是ch的ASC码 数字0的ASC码是48 所以(int)ch-48就是对应的数字
p->data=e;
p->next=h->next;
h->next=p;
}//采用头插入法
}

void Add_Big_Num(Big_Num * h1,Big_Num * h2)
{
Big_Num *sum;//和的头结点
Big_Num *p;
int k=0;//进位

sum=(Big_Num *)malloc(sizeof(Big_Num));
sum->next=NULL;

h1=h1->next;
h2=h2->next;

while(h1 && h2)//把大数h1和h2的公共部分加起来
{
p=(Big_Num *)malloc(sizeof(Big_Num));

p->data =h1->data + h2->data +k;
k=(p->data)/10;
p->data=(p->data)%10;
p->next=sum->next;
sum->next=p;
h1=h1->next;
h2=h2->next;
}

if(h1)//如果大数h1还没有加完 继续加
{
while(h1)
{
p=(Big_Num *)malloc(sizeof(Big_Num));
p->data=h1->data;
p->next=sum->next;
sum->next=p;
h1=h1->next;
}
}

if(h2)//h2还没加完 继续加
{
while(h2)
{
p=(Big_Num *)malloc(sizeof(Big_Num));
p->data=h2->data;
p->next=sum->next;
sum->next=p;
h2=h2->next;
}
}

printf("大数之和为:\n");
p=sum->next;
while(p)//输出大数之和sum
{
printf("%d",p->data);
p=p->next;
}
printf("\n");
}

int main()
{
Big_Num *head1=(Big_Num *)malloc(sizeof(Big_Num));
Big_Num *head2=(Big_Num *)malloc(sizeof(Big_Num));

printf("请输入第一个大数:\n");
Creat_List(head1);
printf("请输入第二个大数:\n");
Creat_List(head2);
Add_Big_Num(head1,head2);
return 0;
}

希望能帮助你哈
温馨提示:内容为网友见解,仅供参考
无其他回答
相似回答