题目:
一个多项式可以表达为x的各次幂与系数乘积的和,比如:2x6+3x5+12x3+6x+20 现在,你的程序要读入两个多项式,然后输出这两个多项式的和,也就是把对应的幂上的系数相加然后输出。程序要处理的幂最大为100。
输入格式:
总共要输入两个多项式,每个多项式的输入格式如下:
每行输入两个数字,第一个表示幂次,第二个表示该幂次的系数,所有的系数都是整数。第一行一定是最高幂,最后一行一定是0次幂。
注意第一行和最后一行之间不一定按照幂次降低顺序排列;如果某个幂次的系数为0,就不出现在输入数据中了;0次幂的系数为0时还是会出现在输入数据中。
输出格式:
从最高幂开始依次降到0幂,如:2x6+3x5+12x3-6x+20
注意其中的x是小写字母x,而且所有的符号之间都没有空格,如果某个幂的系数为0则不需要有那项。
思路:
1.用数组依次接收两个多项式。每个多项式从最高幂次开始输入,0幂次结束,中间顺序不定;为了便于计算相同幂次相加后的系数和,可以将幂次设定为数组下标,这样接收完第二个多项式后数组内保存的便是两个多项式对应幂次的系数和。
2.将相加后的结果输出。此处应分为幂次大于1,幂次等于1和幂次小于1(即幂次为0的常数项)三种情况输出;其次,还应再细分为系数等于1,系数等于-1及系数既不等于1也不等于-1三种情况输出;另要特别注意符号位的添加,具体见代码注释。
代码:
#include<stdio.h>
//添加符号位:若下一项系数为正,则加“+”;系数为负则无需再次添加“-”
void is_pos(int num) {
if (num > 0) {
printf("+");
}
}
int main() {
//1.两个多项式相加,保存在数组中
int arr[101] = { 0 };
int m = 0, n = 0,flag=-2,max=0;
do {
if (scanf("%d %d", &m, &n)) {
arr[m] += n; //将多项式幂次相同的系数相加
if (m > max) { //记录出现的最高次幂
max = m;
}
if (m == 0) { //设定循环次数:输入两个多项式(即幂次为0出现两次)后,循环结束
flag++;
}
}
} while (flag);
//2.输出结果(根据幂次大于1、等于1和幂次为0{即常数项}三种情况输出)
int i = 0,f = 0; //f用来标记目前的多项式有无内容输出,便于判断符号位是否添加
//1)幂次大于1时,分系数为1,系数为-1和系数既不为1也不为-1这3种情况输出
for (i = max; i > 1; i--) {
if (arr[i] != 0) {
f = 1;
if (arr[i] != 1&&arr[i]!=-1) { //系数既不为1也不为-1时输出
printf("%dx%d", arr[i], i);
}
else if (arr[i] == 1) { //系数为1时输出
printf("x%d", i);
}
else if (arr[i] == -1) { //系数为-1时输出
printf("-x%d", i);
}
//符号位:前面有输出,中间项的系数不为0且下一项系数也不为0时,添加符号
if (arr[i - 1] != 0) {
is_pos(arr[i - 1]);
}
}
else { //符号位:前面没有输出,此项系数为0但下一项系数不为0时,不添加符号
//符号位:前面有输出,此项系数为0但下一项系数不为0时,添加符号
if (0!=f&&arr[i - 1] != 0) {
is_pos(arr[i - 1]);
}
}
}
//2)幂次等于1时,按系数为1,系数为-1和系数既不为1也不为-1这3种情况输出
if (i == 1) {
if (arr[i] != 0) {
f = 1;
if (arr[i] != 1 && arr[i] != -1) {
printf("%dx", arr[i]);
}
else if (arr[i] == 1) {
printf("x");
}
else if (arr[i] == -1) {
printf("-x");
}
is_pos(arr[0]);
}
else {
if (0 != f && arr[i - 1] != 0) {
is_pos(arr[0]);
}
}
i--;
}
//3)幂次为0时,按照前面有输出,且常数项系数不为0;前面无输出,只输出常数项系数这2种情况输出
if (i == 0) {
if (f&&arr[0]!=0) {
printf("%d", arr[0]);
}
else if (f==0) {
printf("%d", arr[0]);
}
}
return 0;
}
结果:
★要是觉得还不错,就点个赞吧☛