洛谷 P1067 多項式輸出
阿新 • • 發佈:2018-10-13
不用 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 多項式輸出