标签:def 技术 sed scan spl click 次数 结果 --
输入两个多项式,计算它们的加、减及乘法, 将计算结果输出到屏幕上。
1) 输入:从键盘分两行分别输入两个多项式数据,每个多项式输入格式如下:
n a1 m1 a2 m2 a3 m3 . .. ai mi.... an mn
其中n为多项式系数为非零的项数,ai为系数,mi为指数, 它们都是整数,该输入数据所表达的多项式意义为(其中符号^表示幂次):
a1x^m1 + a2x^m2 + a3x^m3 + ...... + an x^mn
2)输出:先输出参与运算的两个多项式, 然后输出它们的运算结果,格式为:
要求:多项式输出时从幂次数高到低的顺序逐项输出,若任何一项的系数是0的话,请不要输出,除非所有的系数为0,则输出0。
void print_polynomial(polynomial *head);
本函数完成一个多项式的输出。题目要求的功能以及本函数具体涉及到多项式链表的创建以及多项式加、减和乘法运算所需的功能模块请在本函数实现之前一并自行完成,并将代码插入在合适的位置。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct node
{
int coef; /* 系数 */
int exp; /* 指数 */
struct node *next;
} polynomial;
/* 提示:递交的答案将会自动插入此处 */
int main(void)
{
polynomial *polyA,*polyB;
polyA=create_polynomial(); /* 其中函数create_polynomial()用于读入并创建多项式A的链表,请自行实现 */
polyB=create_polynomial(); /* 读入并创建多项式B的链表 */
printf("A=");
print_polynomial(polyA); /* 输出多项式A */
printf("B=");
print_polynomial(polyB); /* 输出多项式B */
printf("A+B=");
print_polynomial(add_polynomial(polyA,polyB) );
/* 输出多项式加A+B 的结果, 其中函数add_polynomial(polyA,polyB)将返回A+B的多项式,请自行实现*/
printf("A-B=");
print_polynomial(subtract_polynomial(polyA,polyB) );
/* 输出多项式减A-B 的结果,其中函数subtract_polynomial(polyA,polyB)返回A-B的多项式,请自行实现*/
printf("A*B=");
print_polynomial(multiply_polynomial(polyA,polyB));
/* 输出多项式乘A*B 的结果,其中函数multiply_polynomial(polyA,polyB)返回A*B的多项式,请自行实现 */
return 0;
}
/* 请在这里填写答案 */
在这里给出一组输入。例如:
3 1 2 3 4 5 6
3 1 2 3 4 5 6
在这里给出相应的输出。例如(其中 x 是小写字母):
A=5x^6+3x^4+x^2 B=5x^6+3x^4+x^2 A+B=10x^6+6x^4+2x^2 A-B=0 A*B=25x^12+30x^10+19x^8+6x^6+x^4
有点憨的题目,放在这做个备忘...到现在还没过掉全部样例,应该是还有几种情况没考虑到(但是就是想不到),要是有人写出来了...请一定抬我一手
下面的代码只能得20分
1 /* void print_polynomial(polynomial *head) 2 { 3 polynomial *p; 4 int flag = 0; 5 for (p = head; p != NULL; p = p->next) 6 { 7 if (!flag && p->coef != 0) 8 { 9 flag = 1; 10 if (p->coef > 0) 11 { 12 p->coef == 1 ? printf("x") : printf("%dx", p->coef); 13 printf("^%d", p->exp); 14 } 15 else 16 { 17 p->coef == -1 ? printf("-x") : printf("%dx", p->coef); 18 printf("^%d", p->exp); 19 } 20 } 21 else if (flag && p->coef != 0) 22 { 23 if (p->coef > 0) 24 { 25 p->coef == 1 ? printf("+x") : printf("+%dx", p->coef); 26 printf("^%d", p->exp); 27 } 28 else 29 { 30 p->coef == -1 ? printf("-x") : printf("%dx", p->coef); 31 printf("^%d", p->exp); 32 } 33 } 34 } 35 if (!flag) 36 printf("0"); 37 printf("\n"); 38 } */ 39 void print_polynomial(polynomial *head) 40 { 41 polynomial *p; 42 int flag = 0; 43 for (p = head; p != NULL; p = p->next) 44 { 45 if (!flag && p->coef != 0) 46 { 47 flag = 1; 48 if (p->coef > 0) 49 { 50 if (p->exp == 0) 51 printf("%d", p->coef); 52 else 53 { 54 p->coef == 1 ? printf("x") : printf("%dx", p->coef); 55 p->exp == 1 ? printf("") : printf("^%d", p->exp); 56 } 57 } 58 else 59 { 60 if (p->exp == 0) 61 printf("%d", p->coef); 62 else 63 { 64 p->coef == -1 ? printf("-x") : printf("%dx", p->coef); 65 p->exp == 1 ? printf("") : printf("^%d", p->exp); 66 } 67 } 68 } 69 else if (flag && p->coef != 0) 70 { 71 if (p->coef > 0) 72 { 73 if (p->exp == 0) 74 printf("+%d", p->coef); 75 else 76 { 77 p->coef == 1 ? printf("+x") : printf("+%dx", p->coef); 78 p->exp == 1 ? printf("") : printf("^%d", p->exp); 79 } 80 } 81 else 82 { 83 if (p->exp == 0) 84 printf("%d", p->coef); 85 else 86 { 87 p->coef == -1 ? printf("-x") : printf("%dx", p->coef); 88 p->exp == 1 ? printf("") : printf("^%d", p->exp); 89 } 90 } 91 } 92 } 93 if (!flag) 94 printf("0"); 95 printf("\n"); 96 } 97 /* polynomial *create_polynomial() 98 { 99 polynomial a[10000]; 100 int n; 101 scanf("%d", &n); 102 for (int i = 0; i < n; i++) 103 scanf("%d%d", &a[i].coef, &a[i].exp); 104 for (int i = 0; i < n - 1; i++) 105 for (int j = 0; j < n - i - 1; j++) 106 if (a[j].exp > a[j + 1].exp) 107 { 108 polynomial temp = a[j]; 109 a[j] = a[j + 1]; 110 a[j + 1] = temp; 111 } 112 polynomial *head = NULL, *p = NULL; 113 for (int i = 0; i < n; i++) 114 { 115 p = (polynomial *)malloc(sizeof(polynomial)); 116 p->coef = a[i].coef; 117 p->exp = a[i].exp; 118 p->next = head; 119 head = p; 120 } 121 return head; 122 } */ 123 polynomial *create_polynomial() 124 { 125 int cah[20000] = {0}; 126 int n; 127 scanf("%d", &n); 128 int maxx = -1; 129 int minn = 300001; 130 for (int i = 0; i < n; i++) 131 { 132 int co, ex; 133 scanf("%d%d", &co, &ex); 134 cah[ex + 10000] += co; 135 maxx = maxx < ex + 10000 ? ex + 10000 : maxx; 136 minn = minn > ex + 10000 ? ex + 10000 : minn; 137 } 138 polynomial *head = NULL, *p = NULL; 139 for (int i = minn; i <= maxx; i++) 140 { 141 p = (polynomial *)malloc(sizeof(polynomial)); 142 p->coef = cah[i]; 143 p->exp = i - 10000; 144 p->next = head; 145 head = p; 146 } 147 return head; 148 } 149 /* polynomial *create_polynomial() 150 { 151 polynomial *head = NULL, *p, *tail = NULL; 152 int n; 153 scanf("%d", &n); 154 while (n--) 155 { 156 p = (polynomial *)malloc(sizeof(polynomial)); 157 scanf("%d%d", &p->coef, &p->exp); 158 p->next = head; 159 head = p; 160 } 161 return head; 162 } */ 163 polynomial *add_polynomial(polynomial *a, polynomial *b) 164 { 165 polynomial *head = NULL, *p, *tail = NULL; 166 polynomial *t1 = a, *t2 = b; 167 while (t1 && t2) 168 { 169 p = (polynomial *)malloc(sizeof(polynomial)); 170 if (t1->exp > t2->exp) 171 { 172 p->coef = t1->coef; 173 p->exp = t1->exp; 174 t1 = t1->next; 175 } 176 else if (t1->exp == t2->exp) 177 { 178 p->coef = t1->coef + t2->coef; 179 p->exp = t1->exp; 180 t1 = t1->next; 181 t2 = t2->next; 182 } 183 else 184 { 185 p->coef = t2->coef; 186 p->exp = t2->exp; 187 t2 = t2->next; 188 } 189 if (!head) 190 { 191 head = p; 192 head->next = NULL; 193 tail = head; 194 } 195 else 196 { 197 tail->next = p; 198 tail = tail->next; 199 tail->next = NULL; 200 } 201 } 202 while (t1) 203 { 204 p = (polynomial *)malloc(sizeof(polynomial)); 205 p->coef = t1->coef; 206 p->exp = t1->exp; 207 t1 = t1->next; 208 if (!head) 209 { 210 head = p; 211 head->next = NULL; 212 tail = head; 213 } 214 else 215 { 216 tail->next = p; 217 tail = tail->next; 218 tail->next = NULL; 219 } 220 } 221 while (t2) 222 { 223 p = (polynomial *)malloc(sizeof(polynomial)); 224 p->coef = t2->coef; 225 p->exp = t2->exp; 226 t2 = t2->next; 227 if (!head) 228 { 229 head = p; 230 head->next = NULL; 231 tail = head; 232 } 233 else 234 { 235 tail->next = p; 236 tail = tail->next; 237 tail->next = NULL; 238 } 239 } 240 return head; 241 } 242 polynomial *subtract_polynomial(polynomial *a, polynomial *b) 243 { 244 polynomial *head = NULL, *p, *tail = NULL; 245 polynomial *t1 = a, *t2 = b; 246 while (t1 && t2) 247 { 248 p = (polynomial *)malloc(sizeof(polynomial)); 249 if (t1->exp > t2->exp) 250 { 251 p->coef = t1->coef; 252 p->exp = t1->exp; 253 t1 = t1->next; 254 } 255 else if (t1->exp == t2->exp) 256 { 257 p->coef = t1->coef - t2->coef; 258 p->exp = t1->exp; 259 t1 = t1->next; 260 t2 = t2->next; 261 } 262 else 263 { 264 p->coef = -t2->coef; 265 p->exp = t2->exp; 266 t2 = t2->next; 267 } 268 if (!head) 269 { 270 head = p; 271 head->next = NULL; 272 tail = head; 273 } 274 else 275 { 276 tail->next = p; 277 tail = tail->next; 278 tail->next = NULL; 279 } 280 } 281 while (t1) 282 { 283 p = (polynomial *)malloc(sizeof(polynomial)); 284 p->coef = t1->coef; 285 p->exp = t1->exp; 286 t1 = t1->next; 287 if (!head) 288 { 289 head = p; 290 head->next = NULL; 291 tail = head; 292 } 293 else 294 { 295 tail->next = p; 296 tail = tail->next; 297 tail->next = NULL; 298 } 299 } 300 while (t2) 301 { 302 p = (polynomial *)malloc(sizeof(polynomial)); 303 p->coef = t2->coef; 304 p->exp = t2->exp; 305 t2 = t2->next; 306 if (!head) 307 { 308 head = p; 309 head->next = NULL; 310 tail = head; 311 } 312 else 313 { 314 tail->next = p; 315 tail = tail->next; 316 tail->next = NULL; 317 } 318 } 319 return head; 320 } 321 polynomial *multiply_polynomial(polynomial *a, polynomial *b) 322 { 323 int cach[20000] = {0}; //辅助数组 324 polynomial *head = NULL, *p; 325 polynomial *t1, *t2; 326 int maxx = 0; 327 int minn = 30001; 328 for (t1 = a; t1 != NULL; t1 = t1->next) 329 { 330 for (t2 = b; t2 != NULL; t2 = t2->next) 331 { 332 cach[t1->exp + t2->exp + 10000] += t1->coef * t2->coef; 333 maxx = maxx < t1->exp + t2->exp + 10000 ? t1->exp + t2->exp + 10000 : maxx; 334 minn = minn > t1->exp + t2->exp + 10000 ? t1->exp + t2->exp + 10000 : minn; 335 } 336 } 337 for (int i = minn; i <= maxx; i++) 338 { 339 if (cach[i]) 340 { 341 p = (polynomial *)malloc(sizeof(polynomial)); 342 p->exp = i - 10000; 343 p->coef = cach[i]; 344 p->next = head; 345 head = p; 346 } 347 } 348 return head; 349 }
标签:def 技术 sed scan spl click 次数 结果 --
原文地址:https://www.cnblogs.com/graytido/p/11025342.html