欢迎光临散文网 会员登陆 & 注册

NC16622多项式输出【题解】【入门向】

2023-08-04 22:43 作者:李灿呈  | 我要投稿



题目来源:多项式输出

这道题在做的时候给自己挖了个坑,其实把符号、系数、指数分开来看会更好实现。

这里先给出不断调试给出的答案,思路不是一蹴而就的。


输入:
5
100 -1 1 -3 0 10
输出:
100x^5-x^4+x^3-3x^2+10


输入:
3
输出:
-50 0 0 1
-50x^3+1

首先看到示例。这样的示例是不够的,因为指数为1的时候x后面是不带“^”的,但是此处并未给出指数为1时的示例,因此可以自己给出一个综合性比较强的调试示例


输入:
5
0 -1 1 10 0 1 -1
输出:
-x^4+x^3+10x^2+1

开始our 工程!

#include<bits/stdc++.h>
using namespace std;
int main()
{
   int n;
   cin>>n;
   int cnt=n;
   int a[10000];

首先进行输入的读取,存到n,由于这个n是题目给出的常量,最好不要动,所以我们用cnt来作为变量暂时存储n,以备不时之需。另外根据示例,我们需要输入n+1个指数,因此用数组来存储。

int i=0;
   cnt++;
   while(cnt--)
   {
       cin>>a[i];
       i++;
   }

此处使用了一个简单的while循环来输入存储数组,cnt充当计数君,不要忘记有n+1个数据所以要先cnt++

   cnt=n;
   int meiyoufuhao=0;
   for(i=0;i<=n;i++)
   {
       if(a[i]!=0)
       {
           meiyoufuhao=i;
           break;
       }
   }
   
   for(i=0;i<=n;i++)
   {
       if(a[i]!=0)
       {
           if(i==meiyoufuhao){
               if(abs(a[i])!=1) cout<<a[i];
               if(a[i]==-1) cout<<'-';
           }
           else if(a[i]>0)
           {
               cout<<'+';
               if(abs(a[i])!=1||a[i]==1&&cnt==0) cout<<a[i];
               
           }
           else
           {
               if(abs(a[i])!=1) cout<<a[i];
               if(a[i]==-1)
               {
                   cout<<'-';
                   if(cnt==0) cout<<1;
               }
           }
       }
       if(a[i]!=0&&!cnt==0)
       {
           if(cnt==1)
           {
               cout<<'x';
           }
           else cout<<"x^"<<cnt;
       }
       cnt--;
       
   }
   return 0;
}

主要的实现都在这里了其中meiyoufuhao是没有符号的意思,记录第一个系数不为0的家伙的位置,让它不能带加号。其余的就按照基本的数学尝试实现了,一大堆的if语句,这里我因为前期思考不够,导致分类起来比较复杂。后续会再拿出一个版本上传。


NC16622多项式输出【题解】【入门向】的评论 (共 条)

分享到微博请遵守国家法律