리그캣의 개발놀이터

자료구조 - 다항식의 덧셈(C 언어) 본문

프로그래밍 기본/자료구조

자료구조 - 다항식의 덧셈(C 언어)

리그캣 2018. 1. 21. 16:50


다항식의 덧셈


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
 
#include <stdio.h>
#define MAX(a,b)((a>b)?a:b)     // a>b이면 a, a<b이면 b가 return 
#define MAX_DEGREE 50
 
typedef struct{
    int degree;                         //최고차항 선언
    float coef[2][MAX_DEGREE];          //[0][]은 계수 [1][]은차수를 저장
}polynomial;
 
polynomial addPoly(polynomial A,polynomial B)
{
    polynomial C;  // 다항식 덧셈의 결과 다항식을 저장할 polynomial 구조체 변수 선언
    int A_index=0,B_index=0,C_index=0;
    int A_degree=A.degree,B_degree=B.degree;
    C.degree = MAX(A.degree,B.degree);  //A와 B중에 최고차항을 넣어줌
 
    while(A_index<=A.degree && B_index<=B.degree){
        if(A_degree>B_degree)
        {
            C.coef[0][C_index++]=A.coef[0][A_index++];
            A_degree--;
        }
        else if(A_degree == B_degree){
            C.coef[0][C_index++]=A.coef[0][A_index++]+B.coef[0][B_index++];
            A_degree--;
            B_degree--;
        }
        else
        {
            C.coef[0][C_index++]=B.coef[0][B_index++];
            B_degree--;
        }
    }
    return C;      //다항식 덧셈의 결과 다항식 C를 반환 
}
 
 
void printPoly(polynomial P)
{
    int i,degree;
    degree=P.degree;
 
    for(i=0;i<P.degree+1;i++)
    {
        printf("%3.0fx^%d ",P.coef[0][i],degree--);
    }
    printf("\n");
}
 
void main()
{
    polynomial A={3,{4,3,5,0}};
    polynomial B={4,{3,1,0,2,1}};
 
    polynomial C;
    
    C= addPoly(A,B); // 다항식 A,B에 대한 덧셈을 수행하기 위해 addPoly 함수 호출
 
    printf("\n A(x)="); printPoly(A);       //다항식 A출력
    printf("\n B(x)="); printPoly(B);       //다항식 B출력
    printf("\n C(x)="); printPoly(C);       //다항식 C출력
 
    getchar();
}
cs


Comments