• 7-2 一元多项式的乘法与加法运算


    https://pintia.cn/problem-sets/15/problems/710

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

    输入格式:

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

    输出格式:

    输出分2行,分别以指数递降方式输出乘积多项式以及和多项式非零项的系数和指数。数字间以空格分隔,但结尾不能有多余空格。零多项式应输出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>
    
    #define MAXN 10000001
    
    int in1[1001] = {0};        //第一行输入系数(下标为指数)
    int in2[1001] = {0};        //第二行输入系数(下标为指数)
    int ans1[2001] = {0};        //乘积多项式系数(下标为指数)
    int ans2[1001] = {0};        //和多项式系数(下标为指数)
    
    void disAns(int arr[], int maxLen)
    {
        bool isFirst = true;
        for(int i=maxLen; i>=0; i--)
        {
            if(arr[i]!=0)
            {
                if(isFirst)
                {
                    isFirst = false;
                    printf("%d %d",arr[i],i);
                }
                else
                {
                    printf(" %d %d",arr[i],i);
                }
            }
        }
        if(isFirst)//零多项式
        {
            printf("0 0");
        }
        printf("
    ");
    }
    
    int main()
    {
        int n,a,b;
        int in1max = -2147483648, in2max = -2147483648;
         
        scanf("%d",&n);
        for(int i=0;i<n;i++)
        {
            scanf("%d %d",&a,&b);//系数 指数 
            in1max = b > in1max ? b : in1max;
            in1[b] = a;
            ans2[b] += a;
        }
        
        scanf("%d",&n);
        for(int i=0;i<n;i++)
        {
            scanf("%d %d",&a,&b);//系数 指数 
            in2max = b > in2max ? b : in2max;
            in2[b] = a;
            ans2[b] += a;
        }
        
        //-----------------------------------------
        
        for(int i=0;i<=in1max;i++)
        {
            if(in1[i]==0)
                continue;
            for(int j=0;j<=in2max;j++)
            {
                if(in2[j]==0)
                    continue;
                int index = i+j;
                int num = in1[i] * in2[j];
                ans1[index] += num;
            }
        }
        disAns(ans1, in1max+in2max);
        disAns(ans2, in1max>in2max?in1max:in2max);
    
        
        return 0;
    } 


  • 相关阅读:
    java的枚举
    java解析XML的三种方法
    java静态代理
    java注释
    Jquery基础之DOM操作
    sql点滴43—mysql允许用户远程登陆
    js实现复制功能
    MVC ViewData和ViewBag
    Visual Studio 2013 Web开发新特性
    VisualStudio2013快捷键
  • 原文地址:https://www.cnblogs.com/cbattle/p/10757294.html
Copyright © 2020-2023  润新知