洛谷P1067 多项式输出 (C语言 + 详细注释)
程序员文章站
2024-03-17 20:51:46
...
//本题我采用的是分部输出法,即依次输出符号(难点在于+号),系数(难点在于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;
}
上一篇: Minio安装及集群配置手册