1. 程式人生 > >洛谷 P1067 多項式輸出

洛谷 P1067 多項式輸出

不用 ret www 作用 降冪 簡單 編輯 printf str

題目

(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 ;
}

洛谷 P1067 多項式輸出