#include <stdio.h>
#define MAX(a,b) (((a)>(b))?(a):(b))
#define MAX_DEGREE 101
typedef struct {    // 다항식 구조체 타입 선언
 int degree;   // 다항식의 차수
 float coef[MAX_DEGREE]; // 다항식의 계수
} polynomial;
//
polynomial poly_add1(polynomial A, polynomial B)  // C=A+B

 polynomial C;    // 결과 다항식
 int Apos=0, Bpos=0, Cpos=0; // 배열 인덱스 변수
 int degree_a=A.degree;
 int degree_b=B.degree;
 C.degree = MAX(A.degree, B.degree); // 결과 다항식 차수

 while( Apos<=A.degree && Bpos<=B.degree ){
  if( degree_a > degree_b ){
    C.coef[Cpos++]= A.coef[Apos++];
    degree_a--;
  }
  else if( degree_a == degree_b ){
    C.coef[Cpos++]=A.coef[Apos++]+B.coef[Bpos++];
    degree_a--; degree_b--;
  }
  else {
    C.coef[Cpos++]= B.coef[Bpos++];
      degree_b--;
  }
 }
 return C;
}
polynomial poly_sub1(polynomial A, polynomial B)  // C=A+B

 polynomial C;    // 결과 다항식
 int Apos=0, Bpos=0, Cpos=0; // 배열 인덱스 변수
 int degree_a=A.degree;
 int degree_b=B.degree;
 C.degree = MAX(A.degree, B.degree); // 결과 다항식 차수

 while( Apos<=A.degree && Bpos<=B.degree ){
  if( degree_a > degree_b ){
    C.coef[Cpos++]= A.coef[Apos++];
    degree_a--;
  }
  else if( degree_a == degree_b ){
    C.coef[Cpos++]=A.coef[Apos++]-B.coef[Bpos++];
    degree_a--; degree_b--;
  }
  else {
    C.coef[Cpos++]= -B.coef[Bpos++];
      degree_b--;
  }
 }
 return C;
}
// 주함수
void main()
{
 int i;
 polynomial a ; // { 5, {3, 6, 0, 0, 0, 10} };
 polynomial b ; // { 4,    {7, 0, 5, 0, 1} };
 polynomial c, d;

 printf(" 다항식 A 최대차수 입력 : ");
 scanf("%d", &a.degree);
 printf(" 다항식 A 계수     입력 : ");
 for (i=0; i<=a.degree; i++)
  scanf("%f", &a.coef[i]);

 puts("\n");
 printf(" 다항식 B 최대차수 입력 : ");
 scanf("%d", &b.degree);
 printf(" 다항식 B 계수     입력 : ");
 for (i=0; i<=b.degree; i++)
  scanf("%f", &b.coef[i]);

 c = poly_add1(a,b); // A+B
 d = poly_sub1(a,b); // A-B

 // 다항식 c, d 출력하는 문장
 printf("\n 다항식 A+B 결과 : ");
 int cexp = c.degree;
 printf("%.0fX^%d", c.coef[0], cexp--);
 for (i=1; i<=c.degree; i++)
  if ((int)c.coef[i] != 0)
   if (c.coef[i] > 0)
        printf("+%.0fX^%d", c.coef[i], cexp--);
   else printf("%.0fX^%d", c.coef[i], cexp--);

 printf("\n 다항식 A-B 결과 : ");
 int dexp = d.degree;
 printf("%.0fX^%d", d.coef[0], dexp--);
 for (i=1; i<=d.degree; i++)
  if ((int)d.coef[i] != 0)
   if (d.coef[i] > 0)
              printf("+%.0fX^%d", d.coef[i], dexp--);
   else printf("%.0fX^%d", d.coef[i], dexp--);

 puts("\n\n");
 
}

 

 

 

이거랑

 

 

#include<stdio.h>
#include<stdlib.h>

typedef struct node
{
 float       coef; // 계수
 int         expon; //지수
 struct node *link; // 구조 : (coef-expon-link)
} node;

int main()
{
 node *a, *b, *c;  // 연결리스트 3개(구조체포인터 3개) 
 node *a_before, *a_next;
 node *b_before, *b_next;
 node *c_next;
 int i, a_count, b_count ; // cs, ce;
 a = a_before = a_next = NULL;

 printf("\n 다항식 A 항 개수 입력    : ");
 scanf("%d", &a_count);
  
 printf(" 다항식 A 입력(계수/차수) : ");
 a = (node *)malloc(sizeof(node));
 scanf("%f %d", &a->coef, &a->expon);
 a->link = NULL;
 a_before = a;

 for (i=1; i<a_count; i++)
 {
  printf(" 다항식 A 입력(계수/차수) : ");
  a_next = (node *)malloc(sizeof(node));
  scanf("%f %d",
      &a_next->coef, &a_next->expon); 
  a_next->link = NULL;
  a_before->link = a_next;
  a_before = a_next;
 }
 
 a_before = a;
 printf("\n 다항식 A = ");
 printf("%.0fX^%d ",
      a_before->coef, a_before->expon);
 a_before = a_before->link;
 while (a_before != NULL)
 {
  if (a_before->coef > 0)
    printf("+%.0fX^%d ",
           a_before->coef, a_before->expon);
  else printf("%.0fX^%d ",
           a_before->coef, a_before->expon);
  a_before = a_before->link;
 } 

 puts("\n\n");

 printf("\n 다항식 B 항 개수 입력    : ");
 scanf("%d", &a_count);
  
 printf(" 다항식 B 입력(계수/차수) : ");
 a = (node *)malloc(sizeof(node));
 scanf("%f %d", &a->coef, &a->expon);
 a->link = NULL;
 a_before = a;

 for (i=1; i<a_count; i++)
 {
  printf(" 다항식 B 입력(계수/차수) : ");
  a_next = (node *)malloc(sizeof(node));
  scanf("%f %d",
      &a_next->coef, &a_next->expon); 
  a_next->link = NULL;
  a_before->link = a_next;
  a_before = a_next;
 }
 
 a_before = a;
 printf("\n 다항식 B = ");
 printf("%.0fX^%d ",
      a_before->coef, a_before->expon);
 a_before = a_before->link;
 while (a_before != NULL)
 {
  if (a_before->coef > 0)
    printf("+%.0fX^%d ",
           a_before->coef, a_before->expon);
  else printf("%.0fX^%d ",
           a_before->coef, a_before->expon);
  a_before = a_before->link;
 } 
 puts("\n\n\n");
}

 

 

이거를 어떻게 합쳐야 되는지..ㅠ