洛谷 P1067 [NOIP2009 普及组] 多项式输出 题解 (C/C++)

大致思路

主要就是分类讨论,将符号,系数,指数分开考虑,归类,注意第一项要特殊处理。(还有就是先从左往右找到第一个系数不为0的数在讨论,这道题不这样也可以ac,判例好像没有
5
0 0 0 2 1 1
这样的数据)

//P1067 [NOIP2009 普及组] 多项式输出
//#define LOCAL
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>//abs
#define clr(x) memset(x,0,sizeof(x))
using namespace std;

int main() {
    
    
#ifdef LOCAL
	freopen("data.in","r",stdin);
	freopen("data.out","w",stdout);
#endif
	int n;
	int arr[105];
	clr(arr);
	cin>>n;
	for(int i = n;i>=0;i--) {
    
    
		cin>>arr[i];
	}
	int p;
	for(p = n;p>=0;) {
    
    
		//从左往右先找第一个不为0的系数
		if(arr[p]!=0) {
    
    
			break;
		}
		p--;
	}
	for(int i = p;i>=0;i--) {
    
    
		if(arr[i]==0)continue;
		if(i!=p) {
    
    //符号
			if(arr[i]>0)printf("+");
		}
		if(arr[i]<0)printf("-");
		if(abs(arr[i])!=1||i==0)printf("%d",abs(arr[i]));//系数
		if(i!=0)printf("x");//x
		if(i!=1&&i!=0)printf("^%d",i);

	}

}

猜你喜欢

转载自blog.csdn.net/Jason__Jie/article/details/115030976
今日推荐