洛谷 P1067 多项式输出

题目

(Markdown编辑器复制这个修改太麻烦,索性直接粘贴网址了...)
网址如下:
洛谷 P1067 多项式输出

题解

这是个简单的模拟题,不算复杂。题目大意就是给你一个数 n ,以及 n + 1 项系数,以降幂的方式输出对应的一元n次多项式。需要注意的地方有:

  • 当这个系数大于 0 时,如果此项为第一项,检查 n 是否是 1 ,并且还要检查此项系数是否是 1 。系数是否是 1 控制 x 的系数能不能出现 1 ,n 是否是 1 控制 x 的幂次方能不能出现 1 ,是否是第一项控制当系数大于 0 时候是否有 '+' 号。
  • 当这个系数小于 0 时,需要检查 n 是否是 1 ,并且还要检查此项系数是否是 -1 。系数是否是 -1 控制 x 的系数能不能只出现 '-'号,n 的作用等同于上面。
  • 当这个系数等于 0 时,直接将 n 减一 ,便于之后的多项式的输出。
  • 每输出一项 n 得减一,因为是按降序排列。
  • 当 n == 0 时,说明到了最后一项输出的时候了,此时需要根据这个值的情况进行输出。如果这个值大于 0 ,则输出值的同时也需要输出 '+' 号;如果这个值小于 0 ,直接输出就好,符号已经包含在数字里;如果这个值为 0 ,直接跳出循环,不用输出。

代码如下:

#include <cstdio>
#include <iostream>
#include <algorithm>
#include <string>
#include <cstring>
#include <cmath>
#include <stack>
#include <vector>
#include <map>
#include <set>
#include <queue>
#include <utility>
#define ll long long

using namespace std ;

int main(){
    int t ;
    cin >> t ;
    int n = t ;
    int *a = new int[n+10] ;
    for ( int i = 0 ; i <= n ; i ++ ){
        cin >> a[i] ;
    }
    for ( int i = 0 ; i <= t ; i ++ ){
        if ( n == 0 ){
            if ( a[i] > 0 ){
                printf("+%d" , a[i]) ;
            }
            else if ( a[i] < 0 ){
                printf("%d" , a[i]) ;
            }else{
                break ;
            }
        }else{
            if ( a[i] > 0 ){
                if ( i == 0 ){
                    if ( n == 1 ){
                        if ( a[i] == 1 ){
                            printf("x") ;
                            n -- ;
                        }else{
                            printf("%dx" , a[i]) ;
                            n -- ;
                        }
                    }else{
                        if ( a[i] == 1 ){
                            printf("x^%d" , n --) ;
                        }else{
                            printf("%dx^%d" , a[i] , n --) ;
                        }
                    }
                }else{
                    if ( n == 1 ){
                        if ( a[i] == 1 ){
                            printf("+x") ;
                            n -- ;
                        }else{
                            printf("+%dx" , a[i]) ;
                            n -- ;
                        }
                    }
                    else{
                        if ( a[i] == 1 ){
                            printf("+x^%d" , n --) ;
                        }else{
                            printf("+%dx^%d" , a[i] , n --) ;
                        }
                    }
                }
            }else if ( a[i] < 0 ){
                if ( n == 1 ){
                    if ( a[i] == -1 ){
                        printf("-x") ;
                        n -- ;
                    }else{
                        printf("%dx" , a[i]) ;
                        n -- ;
                    }
                }else{
                    if ( a[i] == -1 ){
                        printf("-x^%d" , n --) ;
                    }else{
                        printf("%dx^%d" , a[i] , n --) ;
                    }
                }
            }else{
                n -- ;
            }
        }
    }
    return 0 ;
}

猜你喜欢

转载自www.cnblogs.com/Cantredo/p/9781173.html
今日推荐