楼主你好
设计思路:
先在函数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;
}
希望能帮助你哈
温馨提示:内容为网友见解,仅供参考