洛谷P1067 多项式输出题解 题解

洛谷P1067 多项式输出题解


P1067多项式输出 题目地址
该题其实不是很难,思路简单,但是很让人难受,要讨论各种情况。
我写代码的思路就是把所有情况分为四种:
1、最高次项的处理;
2、常数项的处理;
3、一次项的处理;
4、其他非特殊项的处理。
为什么要这么分类呢?分类的依据是因为前三类关于项数系数的处理比较复杂,考虑到的情况比较多。
另外还有在我个人认为此题关于最高次项系数能否为0的问题表述的不清楚。

相关代码我已经用了批注,代码写的不好,水平有待提高,我会继续努力的。

话不多说,请看代码:

/*
 * 洛谷P1067多项式输出
 * 2020 03 13
 * write by Miubai
*/
#include<stdio.h>

#define A a[i]

int main(void){
    int a[201];
    int i,n,b;

    scanf("%d",&n);
    b = n;

    for(i = 0;i<=n;i++){
        scanf("%d",&A);
    }

    for(i = 0;i<=n;i++){
        if(n == b){                                 //第一项判断
            if (1 == A)
                printf("x^%d",b);
            else if (-1 == A)
                printf("-x^%d",b);
            else if (A>0)
                printf("%dx^%d",A,b);
            else if(A<0)
                printf("%dx^%d",A,b);
        }else if(1 == b) {                          //一次项的判断
            if (1 == A)
                printf("+x");
            else if (-1 == A)
              printf("-x");
            else if(A>0)
                printf("+%dx",A);
            else if (A<0)
                printf("%dx",A);
        }else if (0 == b){                         //常数项的判断
            if (A>0)
                printf("+%d",A);
            else if (A<0)
                printf("%d",A);
        }else {                                    //其他非特殊项
            if(A > 0){                              //系数大于0
                if(A == 1)
                    printf("+x^%d",b);
                else
                    printf("+%dx^%d",A,b);
            }

            if(A<0){                            //系数小于0
                if(-1 == A)
                    printf("-x^%d",b);
                else
                    printf("%dx^%d",A,b);
            }
        }

        b--;
    }
    return 0;
}

谢谢!

posted @ 2020-03-14 23:33  缪白(Miubai)  阅读(164)  评论(0)    收藏  举报