c·c++/c 프로그래밍

다항식의 곱셈

바로이순간 2012. 5. 6. 18:05




#include <stdio.h>

void showPoly(int p[], int deg) {

    int i;

    i=deg;

    if(i>0) {

        printf("%dx^%d", p[i], i);

    }

    i=i-1;

    while(i>-1) {

        if(i>0) {

            if(p[i]>0) printf(" + %dx^%d", p[i], i);

            else if(p[i]<0) printf(" - %dx^%d", -p[i], i);

        }

        else if(p[0]>0) printf(" + %d", p[i]);

        else if(p[0]<0) printf(" - %d",-p[i]);

        i=i-1;

    }

    printf("\n");

}


void addPoly(int p1[], int p1deg, int p2[], int p2deg, int p3[], int *p3deg) {

    int i, n;

    n=p1deg;

    if(p2deg>n) n=p2deg;

    *p3deg=n;

    for(i=0;i<n+1;++i) p3[i]=p1[i]+p2[i];

}


void multPoly(int p1[], int p1deg, int p2[], int p2deg, int p3[], int *p3deg) {

    int i, j;

    *p3deg=p1deg+p2deg;

    for(i=0;i<*p3deg+1;++i) p3[i]=0;


    for(i=0;i<p1deg+1;++i) {

        for(j=0;j<p2deg+1;++j) {

            p3[i+j]=p3[i+j]+p1[i]*p2[j];

        }

    }

}


void diffPoly(int p1[], int p1deg, int p2[], int *p2deg) {

    int i, n;

    n=p1deg;

    *p2deg=p1deg-1;

    for(i=0;i<n;++i) p2[i]=(i+1)*p1[i+1];

}


void integPoly(int p1[], int p1deg, int p2[], int *p2deg) {

    int i, n;

    n=p1deg;

    *p2deg=p1deg+1;

    for(i=0;i<n+1;++i) p2[i+1]=(1/(i+2))*p1[i];

    p2[0]=0;

}



int main() {

    int i, j, n, coef, deg;

    int poly1deg=0, poly2deg=0, poly3deg=0;

    int poly1[100]={0,};

    int poly2[100]={0,};

    int poly3[100]={0,};


    printf("다항식1: ");

    // 다항식의 끝은 -1 -1 로 표현해 준다.

    while(1) {

        scanf("%d%d",&coef, &de g);  //  de g 는 deg 대신 쓴 것입니다.  

        if(deg<0) break;

        poly1[deg]=coef;

        if(deg>poly1deg) poly1deg=deg;

    }


    printf("다항식2: ");

    // 다항식의 끝은 -1 -1 로 표현해 준다.

    while(1) {

        scanf("%d%d",&coef, &de g);  // de g 는 deg 대신 쓴 것입니다.  

        if(deg<0) break;

        poly2[deg]=coef;

        if(deg>poly2deg) poly2deg=deg;

    }


    printf("입력된 다항식1: ");

    showPoly(poly1, poly1deg);    

    printf("입력된 다항식2: ");

    showPoly(poly2, poly2deg);


    addPoly(poly1, poly1deg, poly2, poly2deg, poly3, &poly3deg);

    printf("다항식1 + 다항식2: ");

    showPoly(poly3, poly3deg);        


    multPoly(poly1, poly1deg, poly2, poly2deg, poly3, &poly3deg);

    printf("다항식1 * 다항식2: ");

    showPoly(poly3, poly3deg);        


    diffPoly(poly1, poly1deg, poly3, &poly3deg);

    printf("다항식1의 미분:  ");

    showPoly(poly3, poly3deg);        


    // 다항식의 적분에는 분수가 나오기 때문에 정수로는 문제가 된다.

    //integPoly(poly1, poly1deg, poly3, &poly3deg);

    //printf("다항식1의 적분:  ");

    //showPoly(poly3, poly3deg);        


    return 0;

}