c语言写俩个多项式相乘

Python015

c语言写俩个多项式相乘,第1张

这个是母函数的知识,这一块我没怎么看,楼主可以自己百度一下。大概的意思就是: a[x]:x表示指数,a[x]存系数。如 3x^2+4x+5:可表示为:a[2]=3,a[1]=4,a[0]=5. 多项式加减就是a[x]相加减。多项式相乘就是x相加。也就是下标的运算

没有别的好办法,你看这样行不行,不行你自己再想想吧

#include

void

main()

{

int

a1,b1,c1,d1,e1,f1,a2,b2,c2,d2,e2,f2

printf("ax^5+bx^4+cx^3+dx^2+ex+f=0\n")

printf("请输入:a

b

c

d

e

f\n")

printf("第一个:")

scanf("%d%d%d%d%d%d",&a1,&b1,&c1,&d1,&e1,&f1)

printf("第二个:")

scanf("%d%d%d%d%d%d",&a2,&b2,&c2,&d2,&e2,&f2)

printf("两式相加后得:\n")

printf("%dx^5+%dx^4+%dx^3+%dx^2+%dx+%d=0\n",a1+a2,b1+b2,c1+c2,d1+d2,e1+e2,f1+f2)

}

由于变量太多!输出时要注意哦

希望回答对你有帮助!

//试试看这个,以前写的,应该满足你的要求

#include <stdio.h>

#include <stdlib.h>

#include <math.h>

typedef struct _PolyNode {

int index

int cofficient

} NodeType

typedef struct _polynomial {

NodeType data

    struct _polynomial *next

} Polynomial

void append(Polynomial* head, NodeType data) {

Polynomial *p = (Polynomial*)malloc(sizeof(Polynomial))

p->data = data

p->next = head->next

head->next = p

}

void input(Polynomial* head) {

NodeType data

do {

scanf("%d%d", &data.cofficient, &data.index)

append(head, data)

} while(data.cofficient != 0 && data.index != -1)

}

/**

 * 合并同类项并去除系数为0的项

 */

void merge(Polynomial *head) {

Polynomial *p

for(p = head->next p->next p = p->next)

if(p->data.index == p->next->data.index) {

p->data.cofficient += p->next->data.cofficient

p->next->data.cofficient = 0

}

for(p = head p->next)

if(p->next->data.cofficient == 0) {

Polynomial *q

q = p->next

p->next = q->next

free(q)

}

else

p = p->next

}

/**

 * 按指数从高到低排序

 */

void sort(Polynomial *head) {

Polynomial *p, *q

for(p = head->next p->next p = p->next) {

NodeType t = p->data

for(q = p->next q q = q->next) {

if(t.index < q->data.index) {

p->data = q->data

q->data = t

t = p->data

}

}

}

}

Polynomial* add(Polynomial *a, Polynomial *b) {

Polynomial *p, *ret = (Polynomial*)malloc(sizeof(Polynomial))

ret->next = NULL

for(p = a->next p p = p->next)

append(ret, p->data)

for(p = b->next p p = p->next)

append(ret, p->data)

return ret

}

Polynomial* multiply(Polynomial *a, Polynomial *b) {

Polynomial *p, *q, *ret = (Polynomial*)malloc(sizeof(Polynomial))

ret->next = NULL

for(p = a->next p p = p->next)

for(q = b->next q q = q->next) {

NodeType data = {p->data.index + q->data.index, p->data.cofficient * q->data.cofficient}

append(ret, data)

}

return ret

}

void display(Polynomial *head) {

sort(head)

merge(head)

Polynomial *p

for(p = head->next p p = p->next) {

if(p->data.cofficient < 0)

printf("-")

else if(p != head->next)

printf("+")

if(!(abs(p->data.cofficient) == 1 && p->data.index > 0))

printf("%d", abs(p->data.cofficient))

if(p->data.index > 0) {

printf("X")

if(p->data.index > 1)

printf("^%d", p->data.index)

}

}

printf("\n")

}

int main() {

Polynomial *a = (Polynomial*)malloc(sizeof(Polynomial)),

   *b = (Polynomial*)malloc(sizeof(Polynomial))

input(a)

input(b)

display(a)

display(b)

display(add(a, b))

display(multiply(a, b))

return 0

}