用链表法做大整数四则运算C语言程序

如题所述

只做了加法,思路应该都是这个

#include <stdio.h>
#include <stdlib.h>
typedef struct node{
int data;
struct node *next;
}List,*Link_list;
Link_list create_list(void)
{
Link_list h=NULL;
Link_list s=NULL;
char data=0;
h=(Link_list)malloc(sizeof(List));
h->next=NULL;
h->data=0;
while((data=getchar())=='\n')
{
}

while(1)
{

if(data=='\n')
{
break;
}
s=(Link_list)malloc(sizeof(List));
s->data=data-'0';
s->next=h->next;
h->next=s;
data=getchar();
}
return h;
}
void out_put(Link_list h)
{
Link_list s=NULL;
s=h->next;
while(s!=NULL)
{
printf("%d",s->data);
s=s->next;
}
printf("\n");
}
Link_list add(void)
{
Link_list h=NULL;
Link_list s1=NULL;
Link_list s2=NULL;
Link_list p=NULL;
printf("输入第一个数据以回车结束:\n");
s1=create_list();
s1=s1->next;
printf("输入第二个数据以回车结束:\n");
s2=create_list();
s2=s2->next;
h=(Link_list)malloc(sizeof(List));
h->data=0;
h->next=NULL;
while(s1!=NULL && s2!=NULL)
{
p=(Link_list)malloc(sizeof(List));
p->data=s1->data+s2->data+h->data;
h->data=0;

if(p->data>9)
{
p->data=p->data-10;
h->data=1;
}
p->next=h->next;
h->next=p;
s1=s1->next;
s2=s2->next;
}
while(s1!=NULL)
{
p=(Link_list)malloc(sizeof(List));
p->data=s1->data+h->data;
h->data=0;
if(p->data>9)
{
p->data=p->data-10;
h->data=1;
}
p->next=h->next;
h->next=p;
s1=s1->next;

}
while(s2!=NULL)
{
p=(Link_list)malloc(sizeof(List));
p->data=s2->data+h->data;
h->data=0;
if(p->data>9)
{
p->data=p->data-10;
h->data=1;
}
p->next=h->next;
h->next=p;
s2=s2->next;
}
if(h->data==1)
{
p=(Link_list)malloc(sizeof(List));
p->data=1;
p->next=h->next;
h->next=p;
}
return h;
}

int main()
{
int select = 0;
Link_list h=0;
printf("请选择功能:\n");
printf("1 - 相加\n");
printf("2 - 相减\n");
printf("3 - 相乘\n");
printf("4 - 相除\n");
printf("0 - 退出\n");
while(1)
{
printf("选择功能\n");
scanf("%d",&select);
if(0 == select)
{
break;
}
switch(select)
{
case 1:
h=add();
printf("所求的和:\n");
out_put(h);
break;
case 2:
break;
case 3:
break;
case 4:
break;
default :
printf("输入有误\n");
break;
}
}
}
温馨提示:答案为网友推荐,仅供参考
相似回答