洛谷P1067 多项式输出 (C语言 + 详细注释)

//本题我采用的是分部输出法,即依次输出符号(难点在于+号),系数(难点在于1和-1),未知数,指数。在输出每一部分时分别讨论特殊情况。

下面是我AC的代码(一刷):

#include<stdio.h>

int main() {
	int i, n, a[105], flag;         //数组a存储系数
	scanf("%d", &n);              
	flag = 0;                    //flag为0表示是输出第一项,为1表示不是第一项。因为第一项系数为正时不输出'+',所以要特判一下
	for (i = n; i >= 0; i--) {       //小技巧:i直接表示指数,因为是按照指数递减输出,所以i也递减
		scanf("%d", &a[i]);      //一边读入一边输出
		if (a[i]) {             //只有系数不为0才输出
			if (a[i] > 0 && flag)       //输出符号,系数为正且不是第一项时要输出'+'
				printf("+");
			if (a[i] == -1)            //系数为-1时才单独输出'-',否则'-'会随着系数一块输出的,如输出系数-2时就顺带着输出了'-'
				printf("-");

			if (a[i] != 1 && a[i] != -1)      //不是+1和-1就直接输出系数
				printf("%d", a[i]);
			else if (i == 0)           //如果是常数项,那么1就不能省(不用管是1还是-1,因为前面已经处理过符号了)
				printf("1");
			if (i)                  //如果不是常数项就输出未知数x
				printf("x");
			if (i > 1)               //i == 1 时指数为1,不用输出,其他情况i就是指数
				printf("^%d", i);
			flag = 1;                //已经输出了flag就设为1
		}

	}

	return 0;
}

 

后来又刷一次,思路一样,但是代码更简洁了些,以下是代码(二刷)

#include<bits/stdc++.h>
using namespace std;
const int N = 105;
const int INF = 0x3fffffff;
typedef long long ll;

int main() {
	int n, x, flag = 0;
	cin >> n;
	for (int i = 0; i <= n; i++) {
		cin >> x;
		if (x) {
			flag = 1;
            
            //处理正负号   
			if (x > 0 && i) cout << "+";
			if (x < 0) cout << "-";

            //数字部分
			if (x != 1 && x != -1) cout << abs(x);
			else if (n - i == 0) cout << 1;

            //指数部分
			if (n - i > 1) cout << "x^" << n - i;
			else if (n - i == 1) cout << "x";
		}
	}

	if (!flag) cout << 0;             //所有系数都是0时,只输出0
	return 0;
}

运行结果(两次一样):

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值