多项式输出

[NOIP2009 普及组] 多项式输出

题目描述

一元 n n n 次多项式可用如下的表达式表示:

f ( x ) = a n x n + a n − 1 x n − 1 + ⋯ + a 1 x + a 0 , a n ≠ 0 f(x)=a_nx^n+a_{n-1}x^{n-1}+\cdots +a_1x+a_0,a_n\ne 0 f(x)=anxn+an1xn1++a1x+a0,an=0

其中, a i x i a_ix^i aixi 称为 i i i 次项, a i a_i ai 称为 i i i 次项的系数。给出一个一元多项式各项的次数和系数,请按照如下规定的格式要求输出该多项式:

  1. 多项式中自变量为 x x x,从左到右按照次数递减顺序给出多项式。

  2. 多项式中只包含系数不为 0 0 0 的项。

  3. 如果多项式 n n n 次项系数为正,则多项式开头不出 + 号,如果多项式 n n n 次项系数为负,则多项式以 - 号开头。

  4. 对于不是最高次的项,以 + 号或者 - 号连接此项与前一项,分别表示此项系数为正或者系数为负。紧跟一个正整数,表示此项系数的绝对值(如果一个高于 0 0 0 次的项,其系数的绝对值为 1 1 1,则无需输出 1 1 1)。如果 x x x 的指数大于 1 1 1,则接下来紧跟的指数部分的形式为“ x b x^b xb”,其中 b b b x x x 的指数;如果 x x x 的指数为 1 1 1,则接下来紧跟的指数部分形式为 x x x;如果 x x x 的指数为 0 0 0,则仅需输出系数即可。

  5. 多项式中,多项式的开头、结尾不含多余的空格。

输入格式

输入共有 2 2 2
第一行 1 1 1 个整数, n n n,表示一元多项式的次数。
第二行有 n + 1 n+1 n+1 个整数,其中第 i i i 个整数表示第 n − i + 1 n-i+1 ni+1 次项的系数,每两个整数之间用空格隔开。

输出格式

输出共 1 1 1 行,按题目所述格式输出多项式。

样例 #1

样例输入 #1

5 
100 -1 1 -3 0 10

样例输出 #1

100x^5-x^4+x^3-3x^2+10

样例 #2

样例输入 #2

3 
-50 0 0 1

样例输出 #2

-50x^3+1

提示说明

NOIP 2009 普及组 第一题
对于100%数据, 0 ≤ n ≤ 100 0 \le n \le 100 0n100,$-100 \le 系数 系数 系数 \le 100$


upd 2022.8.1 \text{upd 2022.8.1} upd 2022.8.1:新增加一组 Hack 数据。

代码内容

#include <stdio.h>
#include <math.h>

int main()
{
    int n,i,index=0;
    scanf("%d",&n);

    if(n==0)
    {
        printf("1");
        return 0;
    }
    
    int arr[n+1];
    for(i=0;i<=n;i++)
    {
        scanf("%d",&arr[i]);
    }
    for(i=0;i<=n;i++)
    {
        if(arr[0]==0&&arr[i]==0&&arr[i+1]!=0)
        {
            index=i+1;
            break;
        }
    }
    
    if(arr[index]!=0)
    {
        if(abs(arr[index])!=1)
        {
            printf("%dx^%d",arr[index],n-index);
        }
        else
        {
            if(arr[index]==1)
                printf("x^%d",n-index);
            if(arr[index]==-1)
                printf("-x^%d",n-index);
        }
    }
        
    for(i=index+1;i<=n-2;i++)
    {
        if(arr[i]!=0)
        {
            if(abs(arr[i])!=1)
            {
                if(arr[i]>0)
                printf("+%dx^%d",arr[i],n-i);
                if(arr[i]<0)
                printf("%dx^%d",arr[i],n-i);
            }
            else
            {
                if(arr[i]==1)
                    printf("+x^%d",n-i);
                if(arr[i]==-1)
                    printf("-x^%d",n-i);
            }
        }
    }

    if(arr[n-1]!=0)
    {
        if(abs(arr[n-1])!=1)
        {
            if(arr[n-1]>0)
                printf("+%dx",arr[n-1]);
            if(arr[n-1]<0)
                printf("%dx",arr[n-1]);
        }
        else
        {
            if(arr[n-1]==1)
                printf("+x");
            if(arr[n-1]==-1)
                printf("-x");
        }
    }

    if(arr[n]!=0)
    {
            if(arr[n]>0)
                printf("+%d",arr[n]);
            if(arr[n]<0)
                printf("%d",arr[n]);
    }

    return 0;
}

相关推荐

  1. 多项式输出

    2024-03-27 17:04:01       14 阅读
  2. 【NC16622】多项式输出

    2024-03-27 17:04:01       15 阅读
  3. Hermite 多项式

    2024-03-27 17:04:01       12 阅读
  4. 【C/C++】多项式求和

    2024-03-27 17:04:01       21 阅读
  5. 多项式分布采样

    2024-03-27 17:04:01       18 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-03-27 17:04:01       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-27 17:04:01       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-27 17:04:01       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-27 17:04:01       18 阅读

热门阅读

  1. MNN详细介绍、安装和编译

    2024-03-27 17:04:01       17 阅读
  2. php 函数五 日期时间相关扩展 一

    2024-03-27 17:04:01       18 阅读
  3. 算法——最长重复子数组(动态规划)

    2024-03-27 17:04:01       18 阅读
  4. 【Linux之·指令gnome-terminal】

    2024-03-27 17:04:01       20 阅读
  5. js实现base64转字符串

    2024-03-27 17:04:01       19 阅读
  6. Unity 中的特殊文件

    2024-03-27 17:04:01       15 阅读