【题解】多项式输出问题c++版(附有Python版本)-创新互联

题目描述

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

创新互联公司主营泽库网站建设的网络公司,主营网站建设方案,成都App定制开发,泽库h5小程序设计搭建,泽库网站营销推广欢迎泽库等地区企业咨询

f (x) = anxn+ an-1xn-1 + ... + a1x + a0,a0≠0

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

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

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

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

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

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

输入描述:
第一行1个整数,n,表示一元多项式的次数。
第二行有n+1 个整数,其中第i 个整数表示第n-i+1 次项的系数,每两个整数之间用空格隔开。
输出描述:
共1行,按题目所述格式输出多项式。
题解:

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

f (x) = anxn+ an-1xn-1 + ... + a1x + a0,a0≠0

首先分析题目,题目的意思很简单,就是给定几个数,然后按照要求进行输出就行了,这通常被称为模拟,即题目说什么,我们就模拟着去做什么。

先进行输入,因为题目给定的n的范围是[1,100],所以用int去存储值就行了

在这里有一个小点需要注意,因为题目的多项式输出其中x的次方是倒着输出的,考虑到下面的遍历循环是倒着来的,所以这里我们存储值的时候也应该要倒着存储值。

#includeusing namespace std;
int main()
{
    int n,i;
    int a[110];
    scanf("%d",&n);
    for (i=n;i>=0;i--){
        scanf("%d",&a[i]);
    return 0;
    }

然后根据题目描述的格式进行输出,在这里有一个注意点,主要是关于0/1/-1的讨论问题,还有就是首项、x的一次方、尾项的问题。我在第一个模拟的时候,由于逻辑比较混乱写了一大堆if...else,那样导致的结果就是逻辑很乱、代码不简洁、容易出差错。

所以,我们需要先分析这几个问题的关键。

首先就是如果用单纯的if...else去输出的话,就会发现其非常的繁琐,因为要不断的讨论0/-1/1以及大于0,小于0的问题,所以在这里我决定依次输出符号、系数、x的次方,再对里面的某些特殊情况进行单独讨论

1、对所有元素进行遍历,如果系数为0的话,就什么都不用输出,并且跳过这一层循环。

2、首项元素单独进行判断,如果首项元素是负数,就输出一个负号,为正就什么都不输出。

3、如果不是首项元素,为正输出‘+’,为负输出‘-’

4、再进行下一层系数的判断,如果是1/-1就不需要输出其系数,否则就输出原值的绝对值

5、然后到x的次方的判断,项数为最后一项的话,即i=0的时候,就不需要输出x,不为最后一项的话,还需要再进行一次判断,如果是次方为1的话,就值输出一个x,如果不是,就输出x的i次方。

总的过程大概就是以上的步骤,现在根据这些步骤来编写代码,如下所示:

#includeusing namespace std;
int main()
{
    int n,i;
    int a[110];
    scanf("%d",&n);
    for (i=n;i>=0;i--){
        scanf("%d",&a[i]);
    }
    for (i=n;i>=0;i--)
    {
        if (a[i]==0) continue;
        if (i==n){
            if (a[i]<0) cout<<'-';
        }
        else{
            if (a[i]<0) cout<<'-';
            else cout<<'+';
        }
        if ((a[i]==1 || a[i]==-1) && i!=0) ;
        else cout<
Python版本如下:
n = int(input())
# 输入几个值,通过迭代成整型
lst = list(map(int,input().split()))
# 设置次方数
count = len(lst)-1
# 进行遍历
for i in lst:
    # 判断值是否为0
    if i==0:
        count-=1
        continue
    # 输出符号
    if count==len(lst)-1:
        if i<0:
            print('-',end='')
    else:
        if i>0:
            print('+',end='')
        else:
            print('-',end='')
    # 输出系数
    if ((i==1 or i==-1) and count!=0):
        pass
    else:
        print(abs(i),end='')
    # 输出x的次方
    if count==0:
        pass
    else:
        if count==1:
            print('x',end='')
        else:
            print(f'x^{count}',end='')
    # 次方数减1
    count-=1

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


新闻标题:【题解】多项式输出问题c++版(附有Python版本)-创新互联
URL地址:http://hbruida.cn/article/copjgj.html