多項式乘法
如何把程式輸出以高次方像低次方遞減排序
輸入時^前面需要加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:");
}