首页 > 其他分享 >一元多项式的乘法与加法运算

一元多项式的乘法与加法运算

时间:2023-05-25 17:01:00浏览次数:47  
标签:200 20 int 多项式 加法 Type 输入 乘法


设计函数分别求两个一元多项式的乘积与和。

输入格式:

输入分2行,每行分别先给出多项式非零项的个数,再以指数递降方式输入一个多项式非零项系数和指数(绝对值均为不超过1000的整数)。数字间以空格分隔。

输出格式:

0 0

输入样例:

4 3 4 -5 2  6 1  -2 0
3 5 20  -7 4  3 1

输出样例:

15 24 -25 22 30 21 -10 20 -21 8 35 6 -33 5 14 4 -15 3 18 2 -6 1
5 20 -4 4 -5 2 9 1 -2 0
#include <stdio.h>
typedef struct Type
{
        int index;
        int num;
} Type;
int main()
{
    Type L1[200];
    Type L2[200];
    Type Lsum[400];
    Type Lmul[400];
    int n1, n2, i, j, k = 1;
    scanf("%d", &n1);
    for(i = 1; i <= n1; ++i)
    {
        scanf(" %d %d", &L1[i].num, &L1[i].index);
    }
    scanf("%d", &n2);
    for(i = 1; i <= n2; ++i)
    {
        scanf(" %d %d", &L2[i].num, &L2[i].index);
    }
    if(n1 == 0 && n2 == 0)
    {
        printf("0 0\n");
        printf("0 0");
        return 0;
    }
    else if(n1 == 0 && n2 != 0)
    {
        printf("0 0\n");
        int cnt = 0;
         for(i = 1; i <= n2; ++i)
        {
            if(L2[i].num != 0)
            {
                if(cnt)
                    printf(" ");
                printf("%d %d", L2[i].num, L2[i].index);
                cnt++;
            }
        }
    }
    else if(n1 != 0 && n2 == 0)
    {
        printf("0 0\n");
        int cnt = 0;
         for(i = 1; i <= n1; ++i)
        {
            if(L1[i].num != 0)
            {
                if(cnt)
                    printf(" ");
                printf("%d %d", L1[i].num, L1[i].index);
                cnt++;
            }
        }
    }
    else
    {
        //乘法
        //复制到新数组
        for(i = 1; i <= n1; i++)
            for(j = 1; j <= n2; j++,k++)
            {
                Lmul[k].num = L1[i].num * L2[j].num;
                Lmul[k].index = L1[i].index + L2[j].index;
            }
//去重
        for(i = 1; i <= k; i++)
        {
            for(j = i + 1; j <= k; j++)
            {
                if(Lmul[i].index == Lmul[j].index)
                {
                    Lmul[i].num += Lmul[j].num;
                    //删除数据
                    Lmul[j].num = Lmul[j].index = 0;
                }
            }
        }

//排序
        for(i = 1; i <= k; ++i)
            for(j = i + 1; j <= k; ++j)
            {
                if(Lmul[i].index < Lmul[j].index)
                {
                    Type temp;
                    temp = Lmul[i];
                    Lmul[i] = Lmul[j];
                    Lmul[j] = temp;
                }
            }
        //复制到信数组
        for(i = 1; i <= n1; i++)
        {
            Lsum[i] = L1[i];
        }
        for(; i <= n1 + n2; i++)
        {
            Lsum[i] = L2[i - n1];
        }
        //数组去重加和
        for(i = 1; i <= n1 + n2; i++)
        {
            for(j = i + 1; j <= n1 + n2; j++)
            {
                if(Lsum[i].index == Lsum[j].index)
                {
                    Lsum[i].num += Lsum[j].num;
                    //删除数据
                    Lsum[j].num = Lsum[j].index = 0;
                }
            }
        }
        //数组排序
        for(i = 1; i <= n1 + n2; ++i)
            for(j = i + 1; j <= n1 + n2; ++j)
            {
                if(Lsum[i].index < Lsum[j].index)
                {
                    Type temp;
                    temp = Lsum[i];
                    Lsum[i] = Lsum[j];
                    Lsum[j] = temp;
                }
            }
        int cnt = 0;
        for(i = 1; i <= k; ++i)
        {
            if(Lmul[i].num != 0)
            {
                if(cnt)
                    printf(" ");
                printf("%d %d", Lmul[i].num, Lmul[i].index);
                cnt++;
            }
        }
        if(cnt == 0)
             printf("0 0");
        printf("\n");
        cnt = 0;
        for(i = 1; i <= n1 + n2; ++i)
        {
            if(Lsum[i].num != 0)
            {
                if(cnt)
                    printf(" ");
                printf("%d %d", Lsum[i].num, Lsum[i].index);
                cnt++;
            }
        }
         if(cnt == 0)
             printf("0 0");

    }

}

标签:200,20,int,多项式,加法,Type,输入,乘法
From: https://blog.51cto.com/u_16129621/6350110

相关文章

  • java输出乘法口诀
    importjava.util.StringTokenizer;publicclassImoocStudent{publicstaticvoidmain(Stringargs[]){for(inti=1;i<9;i++){for(intj=1;j<=i;j++){System.out.print(j+"*"+i+"=&q......
  • day 36 多项式之和
     1.有数组a,a[i+1]=a[i]/(i+1);2.有数组b,b[i+1]=b[i]+a[i+1];3.输出b[49];  #include<iostream>usingnamespacestd;intmain(void){doublea[50],b[50];a[0]=b[0]=1;for(inti=0;i<50;i++){a[i+1]=a[i]/(i+1);b[i+1]=b[i]+a[i+1];......
  • 27 | SIMD:如何加速矩阵乘法?
    00:00讲述:徐文浩大小:10.85M时长:11:50上一讲里呢,我进一步为你讲解了CPU里的“黑科技”,分别是超标量(Superscalar)技术和超长指令字(VLIW)技术。超标量(Superscalar)技术能够让取指令以及指令译码也并行......
  • 64位整数乘法
    题目描述求a乘b对p取模的值。输入格式第一行输入整数a,第二行输入整数b,第三行输入整数p。输出格式输出一个整数,表示a*bmodp的值。数据范围1≤a,b,p≤10^18输入样例345输出样例2分析考虑到a,b,p的数据范围都非常大,无法直接先取模再相乘计算,由于可......
  • 计算机组成原理:阵列乘法器设计实验
    实验名称:1.2阵列乘法器设计实验实验目的了解运算器的组成结构。基于数据通路图,观测并分析运算器的工作原理。基于信号时序图,观测并分析运算器的工作原理。实验设备PC机一台,TDX-CMX实验系统一套。实验预习画出4*4阵列乘法器原理图,分析延迟与哪些因素有关。答:(上传图片......
  • 浅谈同余1(常用定理和乘法逆元)
    点个赞吧,球球了~下一篇:$浅谈同余2(扩展欧几里得,中国剩余定理,BSGS)$https://www.acwing.com/file_system/file/content/whole/index/content/7882318/ $\LaTeX$太多了,分成几个部分0x00总写(瞎说)同余是数学中非常重要的东西,这里会写出同余的基本运用若$a\bmodm=b\bmo......
  • 多项式求和
    一问题描述输出50以内的阶乘的分数相加。二设计思路想通过循环将每项多项式求出并且给数组付初值,然后再通过循环依次相加。三程序流程图 四伪代码实现#include<bits/stdc++.h>;usingnamespacestd;intmain(){doublesum=1,Sum=0;doublea[50];for(inti=0;i<50;i++)......
  • 不用加减乘除做加法
    模拟计算机的加法器实现x存放不进位的加法结果,y存放进位。不进位的结果加上进位就是答案,换句话就是x+y不进位加法结果可以通过异或实现,两数相加的进位可以通过逻辑与,再左移一位实现计算x+y,又是重复上面的步骤,循环即可,直到进位为0,循环结束classSolution{public:in......
  • 学习记录:NC16622[NOIP2009]多项式输出
    题目链接:https://ac.nowcoder.com/acm/problem/16622解题思路:这题有个在拓扑序上的直觉。(并不完全是拓扑学,只是一种感觉)举个例子,每i项,都是有了符号,再有系数,最后指数,我们确定了前面输出什么才有后面的判断。但并不完全是这样,该题当指数为0时,会影响系数的输出格式(x是否要输出......
  • Java实现输出九九乘法表—for循环和递归算法
    Java实现输出99乘法表for循环publicclassninenine{publicstaticvoidmain(String[]args){for(inti=1;i<10;i++){for(intj=1;j<=i;j++){System.out.printf("%d*%d=%d\t",j,i,j*i);}......