用链表实现两个二元二次多项式相乘。
输入
输入的数依次为:x,y,xy,x^2,y^2的系数。
输出
输出的数依次为:x,y,xy,x^2,y^2的系数。
样例输入
1 1 0 0 0
1 1 0 0 0
样例输出
0 0 2 1 1
新手代码,应该是遇到了同一节课
有很多不合适不正确的请大家指正。
```c
#include<stdio.h>
#include<stdlib.h>
typedef int sltdatetype;
typedef struct node{
sltdatetype xishu;
struct node *next;
} Node ,*Link;
//打印多项式
void show(node* head)
{
node* cur = head->next;
printf("%dx",cur->xishu);//打印第一项
cur = cur->next;
printf("+%dy",cur->xishu);
cur = cur->next;
printf("+%dxy",cur->xishu);
cur = cur->next;
printf("+%dx^2",cur->xishu);
cur = cur->next;
printf("+%dy^2",cur->xishu);
cur = cur->next;
printf("\n");
}
//创建链表
int createLinklist(Link head){
int c;
char ch=1;
Link p,q;
q=head;
while(ch!='\n')
{
p=(Link)malloc(sizeof(Node));
scanf("%d",&c);
p->xishu=c;
q->next=p;
p->next=NULL;
q=p;
ch=getchar();
}
q->next=NULL;
ch=1;
return 1;
}
int mul(Link s1,Link s2,Link l)
{
int i=4,n;
Link p,q,ms,mg;
p=s1->next;
q=s2->next;
mg=l;
if(p->xishu!=0||q->xishu!=0)
{
ms=(Link)malloc(sizeof(Node));
ms->xishu=0;
mg->next=ms;
ms->next=NULL;
mg=ms;
ms=(Link)malloc(sizeof(Node));
ms->xishu=0;
mg->next=ms;
ms->next=NULL;
mg=ms;
ms=(Link)malloc(sizeof(Node));
ms->xishu=p->xishu*(q->next)->xishu+(p->next)->xishu*q->xishu;
mg->next=ms;
ms->next=NULL;
mg=ms;
ms=(Link)malloc(sizeof(Node));
ms->xishu=p->xishu*q->xishu;
mg->next=ms;
ms->next=NULL;
mg=ms;
ms=(Link)malloc(sizeof(Node));
ms->xishu=(p->next)->xishu*(q->next)->xishu;
mg->next=ms;
ms->next=NULL;
mg=ms;
}
else
{
for(n=0;n<4;n++)
{
ms=(Link)malloc(sizeof(Node));
ms->xishu=0;
mg->next=ms;
ms->next=NULL;
mg=ms;
}
}
return 1;
}
int show1(Link head){
Link p;
p=(Link)malloc(sizeof(Node));
p=head->next;
while(p!=NULL){
printf("%d,",p->xishu);
p=p->next;
}
}
int main(){
int n;
Link num1;
Link num2;
Link List;
List=(Link)malloc(sizeof(Node));
List->next=NULL;
num1=(Link)malloc(sizeof(Node));//创建了一个单链表,设置头结点head
num1->next=NULL;
num2=(Link)malloc(sizeof(Node));//创建了一个单链表,设置头结点head
num2->next=NULL;
printf("请输入两行多项式系数(用空格隔开,回车结束):\n");
createLinklist(num1);
createLinklist(num2);
mul(num1,num2,List);
show(num1);
show(num2);
show1(List);
return 0;
}
```