#9952: 多項式相乘


a0929396588 (junrui)


多項式乘法
如何把程式輸出以高次方像低次方遞減排序
輸入時^前面需要加x如何加入
此程式的常數項輸入時必須多加^1(例如:6^1),但是在乘法輸出時兩個常數項(例如6^1和1^1),輸出時就會是6^2,這裡該如何解決

 void input(struct poly **eq_h)輸入

{

struct poly *prev = NULL;

char symbol = '+';

do{

ptr = (struct poly *) malloc(sizeof(struct poly));

ptr->next = NULL;

scanf("%d^%d", &ptr->coef, &ptr->exp);

if(*eq_h == NULL)

*eq_h = ptr;

else{

if(symbol=='-') ptr->coef =(-1)*(ptr->coef);

prev->next = ptr;

}

prev = ptr;

scanf("%c", &symbol);

}while(symbol!='\n');

}

void poly_mul(void)乘法

{

struct poly *current_n1, *current_n2, *prev;

    int num1=0,num2=0,num_buf=0;

current_n1 = eq_h1;

current_n2 = eq_h2;

prev = NULL;

while(current_n1 != NULL){ /* 用第一個多項式去乘多項式的每一個項*/

while(current_n2 != NULL){

            ptr = (struct poly *) malloc(sizeof(struct poly));

    ptr->next = NULL;

ptr->coef =(-1)*(current_n1->coef)*(current_n2->coef); /*系數相乘*/

ptr->exp = (current_n1->exp)+(current_n2->exp);    /*指數相加*/

current_n2 = current_n2->next;

            if(ptr->coef != 0){  /* 當相乘結果不等於0,則放入答案多項式中 */

if(ans_buf == NULL) ans_buf = ptr;

else prev->next = ptr;

prev = ptr;

}

else free(ptr);

}

        current_n2=eq_h2;

        current_n1=current_n1->next;   }

    current_n1 = eq_h1;

current_n2 = eq_h2; 

    while(current_n1!=NULL){   /*第一個多項式的最高次*/

        if(num1<(current_n1->exp)){

            num1=current_n1->exp; }

current_n1=current_n1->next;

}

    while(current_n2!=NULL){   /*第二個多項式的最高次*/

        if(num2<(current_n2->exp)){

            num2=current_n2->exp;

        }

current_n2=current_n2->next;   }

    num1=num1+num2;   /*把最高次的存在num1*/

    current_n1=ans_buf;

    for(num2=0;num2<=num1;num2++){

        num_buf=0;

        do{

            if((current_n1->exp)==num2){

            num_buf=num_buf+(current_n1->coef);

            }

            current_n1=current_n1->next;

        }while(current_n1!=NULL);

         if(num_buf!=0){

             if(num_buf>0)

                 printf("+%d^%d",num_buf,num2);

             if(num_buf<0)

                 printf("%d^%d",num_buf,num2);

         }

        current_n1=ans_buf;      /*繼續判斷*/

    }

    printf("\n");

}

void show_ans(void)輸出

{

struct poly *current_n;

current_n=ans_h;

printf("The answer equation:\n (1) add: ");

while(current_n != NULL){

printf("%d^%d", current_n->coef, current_n->exp);

if(current_n->next != NULL && current_n->next->coef >= 0)

printf("+");

current_n = current_n->next;

}

printf("\n (2) sub:");

    current_n=ans_h1;

    while(current_n != NULL){

printf("%d^%d", current_n->coef, current_n->exp);

if(current_n->next != NULL && current_n->next->coef >= 0)

printf("+");

current_n = current_n->next;

}

    printf("\n (3) mul:");