首页 > 代码库 > PAT 02-线性结构2 一元多项式的乘法与加法运算 (20分)
PAT 02-线性结构2 一元多项式的乘法与加法运算 (20分)
设计函数分别求两个一元多项式的乘积与和。
输入格式:
输入分2行,每行分别先给出多项式非零项的个数,再以指数递降方式输入一个多项式非零项系数和指数(绝对值均为不超过1000的整数)。数字间以空格分隔。
输出格式:
输出分2行,分别以指数递降方式输出乘积多项式以及和多项式非零项的系数和指数。数字间以空格分隔,但结尾不能有多余空格。零多项式应输出0 0
。
输入样例:
4 3 4 -5 2 6 1 -2 03 5 20 -7 4 3 1
输出样例:
15 24 -25 22 30 21 -10 20 -21 8 35 6 -33 5 14 4 -15 3 18 2 -6 15 20 -4 4 -5 2 9 1 -2 0
================================================================================
第一次code:
1 #include <stdio.h> 2 #include <stdlib.h> 3 4 /* run this program using the console pauser or add your own getch, system("pause") or input loop */ 5 6 /* 7 定义链表结构 8 */ 9 typedef struct Node *Ptrnomial; 10 typedef Ptrnomial LinkList; //头结点 11 typedef Ptrnomial Position;//中间节点 12 struct Node 13 { 14 int coef; /*系数*/ 15 int expon; /*指数*/ 16 Position link; 17 }; 18 19 LinkList Read(); 20 void Print(LinkList L); 21 LinkList Multiplication(LinkList L1,LinkList L2); /*乘法*/ 22 LinkList Add(LinkList L1,LinkList L2); /*加法*/ 23 24 int main(void) 25 { 26 LinkList L1,L2,L3,L4; 27 L1 = Read(); 28 L2 = Read(); 29 L3 = Add(L1,L2); 30 L4 = Multiplication(L1,L2); 31 Print(L4); 32 printf("\n"); 33 Print(L3); 34 return 0; 35 } 36 LinkList Read() 37 { 38 int n,c,e; 39 scanf("%d",&n); 40 LinkList L,Rear,p; 41 L = (Ptrnomial)malloc(sizeof(struct Node)); 42 Rear = L; 43 while(n--) 44 { 45 p = (Ptrnomial)malloc(sizeof(struct Node)); 46 scanf("%d %d",&c,&e); 47 p->coef = c; 48 p->expon = e; 49 Rear->link = p; 50 Rear = p; 51 } 52 Rear->link = NULL; 53 return L; 54 } 55 void Print(LinkList L) 56 { 57 LinkList L1; 58 L1 = L->link; 59 int flag = 0; 60 if( !L1 ) /*意思是L1为空时*/ 61 { 62 printf("0 0"); 63 return ; 64 } 65 while( L1 ) /*意思是L1不为空时*/ 66 { 67 if(!flag) 68 { 69 flag = 1; 70 } 71 else 72 { 73 printf(" "); 74 } 75 printf("%d %d",L1->coef,L1->expon); 76 L1 = L1->link; 77 } 78 } 79 /*多项式相乘*/ 80 LinkList Multiplication(LinkList L1,LinkList L2) 81 { 82 Position l1,l2; 83 LinkList l,temp,r,p; 84 l1 = L1->link; 85 l2 = L2->link; 86 l = (struct Node*)malloc(sizeof(struct Node)); 87 l->link = NULL; 88 if( !l1 || !l2) 89 { 90 return l; 91 } 92 while( l1 ) 93 { 94 temp = (struct Node*)malloc(sizeof(struct Node)); 95 r = temp; 96 l2 = L2->link; 97 while( l2 ) 98 { 99 p = (struct Node*)malloc(sizeof(struct Node));100 p->expon = l1->expon + l2->expon;101 p->coef = l1->coef * l2->coef;102 l2 = l2->link; 103 r->link = p;104 r = p;105 }106 r->link = NULL;107 l = Add(l,temp);108 l1 = l1->link;109 }110 return l; 111 }112 /*多项式相加*/113 LinkList Add(LinkList L1,LinkList L2)114 {115 int sum;116 Position l1, l2;117 LinkList l,r,p;118 l1 = L1->link;119 l2 = L2->link;120 l = (struct Node*)malloc(sizeof(struct Node));121 r = l;122 while( l1 && l2)123 {124 /*当两个多项式都存在时*/125 p = (struct Node*)malloc(sizeof(struct Node));126 if(l1->expon == l2->expon)127 {128 /*系数相等时*/129 sum = l1->coef + l2->coef;130 if( sum )131 {132 p->expon = l1->expon;133 p->coef = sum;134 r->link = p;135 r = p;136 }137 l2 = l2->link;138 l1 = l1->link;139 }140 else if(l1->expon < l2->expon)141 {142 p->expon = l2->expon;143 p->coef = l2->coef;144 l2 = l2->link;145 r->link = p;146 r = p;147 } 148 else149 {150 p->expon = l1->expon;151 p->coef = l1->coef;152 l1 = l1->link;153 r->link = p;154 r = p;155 }156 } 157 if( l2 == NULL)158 {159 while( l1 )160 {161 p = (struct Node*)malloc(sizeof(struct Node));162 p->expon = l1->expon;163 p->coef = l1->coef;164 l1 = l1->link;165 r->link = p;166 r =p ;167 }168 }169 if( l1 == NULL)170 {171 while( l2 )172 {173 p = (struct Node*)malloc(sizeof(struct Node));174 p->expon = l2->expon;175 p->coef = l2->coef;176 l2 = l2->link;177 r->link = p;178 r =p ;179 }180 }181 r->link = NULL;182 return l;183 }
PAT 02-线性结构2 一元多项式的乘法与加法运算 (20分)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。