#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");
}
이거를 어떻게 합쳐야 되는지..ㅠ
댓글 0