02-线性结构2 一元多项式的乘法与加法运算

学习mooc的数据结构记录

思路:从基本的多项式相加,推广到多项式相乘,以及多项式指数排列有序的数据输入要求

#include<stdio.h>

typedef struct arr{
    int xishu;
    int zhishu;
}xiang;

int print(xiang arr[],int k);
int addmuti(xiang array1[],int num1,xiang array2[],int num2,xiang arradd[]);
int arrcopy(xiang arr1[],int num,xiang arr2[]);

int main()
{
    xiang array1[1000]={{0,0}};
    xiang array2[1000]={{0,0}};
    xiang arraymuti[1000]={{0,0}};
    xiang arraymutitep[1000]={{0,0}};
    xiang arrayadd[1000]={{0,0}};
    xiang array3[1000]={{0,0}};
    int i=0,j=0,k=0,m=0,num1=0,num2=0;
    scanf("%d",&num1);
    for(i=0;i<num1;i++)
    {
        scanf("%d %d",&array1[i].xishu,&array1[i].zhishu);
    }
    scanf("%d",&num2);
    for(i=0;i<num2;i++)
    {
        scanf("%d %d",&array2[i].xishu,&array2[i].zhishu);
    }
    int num3;
    num3=addmuti(array1,num1,array2,num2,arrayadd);
    k=num2;
    for (i=0;i<num1;i++)
    {   
        xiang array3[1000]={{0,0}};
        m=0;
        for(j=0;j<num2;j++)
        {
            array3[m].xishu=array1[i].xishu*array2[j].xishu;
            array3[m].zhishu=array1[i].zhishu+array2[j].zhishu;
            m++;
        }
        if(i==0)
        {
            arrcopy(array3,num2,arraymuti);
        }
        else
        {
            k=addmuti(arraymuti,k,array3,num2,arraymutitep);
            arrcopy(arraymutitep,k,arraymuti);
        }
    }
    print(arraymuti,k);
    printf("\n");
    print(arrayadd,num3);

}
int addmuti(xiang array1[],int num1,xiang array2[],int num2,xiang arradd[])
{
    int i=0,j=0,k=0;
    while(i<num1 && j<num2)
    {
        if(array1[i].zhishu>array2[j].zhishu)
        {
            arradd[k].zhishu=array1[i].zhishu;
            arradd[k].xishu=array1[i].xishu;
            i++;
            k++;
        }
        else if(array1[i].zhishu<array2[j].zhishu)
        {
            arradd[k].zhishu=array2[j].zhishu;
            arradd[k].xishu=array2[j].xishu;
            j++;
            k++;
        }
        else
        {
            if((array1[i].xishu+array2[j].xishu)!=0)
            {
                arradd[k].xishu=array1[i].xishu+array2[j].xishu;
                arradd[k].zhishu=array1[i].zhishu;
                i++;
                j++;
                k++;
            }
            else
            {
                i++;
                j++;
            }
        }
    }
    if(i>=num1)
    {
        while(j<num2)
        {
            arradd[k].zhishu=array2[j].zhishu;
            arradd[k].xishu=array2[j].xishu;
            j++;
            k++;
        }
    }
    else if(j>=num2)
    {
        while(i<num1)
        {
            arradd[k].zhishu=array1[i].zhishu;
            arradd[k].xishu=array1[i].xishu;
            k++;
            i++;
        }
    }
    return k;
}

int print(xiang arr[],int k)
{
    int i=0;
    printf("%d %d",arr[0].xishu,arr[0].zhishu);
    for(i=1;i<k;i++)
    {
        printf(" %d %d",arr[i].xishu,arr[i].zhishu);
    }
    return 1;
}

int arrcopy(xiang arr1[],int num,xiang arr2[])
{
    int i=0;
    for(i=0;i<num;i++)
    {
        arr2[i].xishu=arr1[i].xishu;
        arr2[i].zhishu=arr1[i].zhishu;
    }
    return 1;
}

利用结构体储存指数和系数的数据,数组代表一个多项式,

注:多项式相乘合并同类项那里,感觉可以用递归。欢迎指出错误。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值