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