题目内容:
一个多项式可以表达为x的各次幂与系数乘积的和,比如:
现在,你的程序要读入两个多项式,然后输出这两个多项式的和,也就是把对应的幂上的系数相加然后输出。
程序要处理的幂最大为100。
输入格式 :
总共要输入两个多项式,每个多项式的输入格式如下:
每行输入两个数字,第一个表示幂次,第二个表示该幂次的系数,所有的系数都是整数。第一行一定是最高幂,最后一行一定是0次幂。
注意第一行和最后一行之间不一定按照幂次降低顺序排列;如果某个幂次的系数为0,就不出现在输入数据中了;0次幂的系数为0时还是会出现在输入数据中。
输出格式:
从最高幂开始依次降到0幂,如:
2x6+3x5+12x3-6x+20
注意其中的x是小写字母x,而且所有的符号之间都没有空格,如果某个幂的系数为0则不需要有那项。
输入样例:
6 2
5 3
3 12
1 6
0 20
6 2
5 3
2 12
1 6
0 20
输出样例:
4x6+6x5+12x3+12x2+12x+40
时间限制: 500ms , 内存限制: 32000kb
来源:网易云课堂——C程序设计(翁恺)第六章第一题
1 #include<stdio.h> 2 #define true 1 3 #define false 0 4 int main() 5 { 6 int polynomial[101] = {0}; 7 int i, temp; 8 int max = 0; 9 int flag = 0; /*结束输入标志位,表示已经 10 输入的多项式个数*/ 11 12 while(flag != 2) { 13 scanf("%d %d", &i, &temp); 14 polynomial[i] += temp; //更新多项式系数 15 16 if (i > max) //找出最大幂次数 17 max = i; 18 19 if (i == 0) //限定输入2个多项式 20 flag++; 21 } 22 23 int signForInteger = true; 24 int signForZero = true; 25 for (i = max; i >= 0; i--) { 26 if (polynomial[i] != 0) { 27 signForZero = false; 28 29 if (polynomial[i] < 0) 30 signForInteger = true; //负数的系数前略去加号 31 32 if (signForInteger == true) 33 signForInteger = false; //最高次项略去加号 34 else 35 printf("+" ); //非最高次项默认加号 36 37 if (i != 0 && polynomial[i] != 1) //省略系数1 38 printf("%d", polynomial[i]); 39 40 if (i == 0) //常数项 41 printf("%d/n",polynomial[i]); 42 else if (i == 1) //i = 1 省略幂次数1 43 printf("x"); 44 else 45 printf("x%d", i); 46 } 47 else { 48 if (i == 0) { 49 if (signForZero == false) 50 printf("+"); //多项式末项为零 51 52 printf("%d/n", polynomial[i]); //多项式为零 53 } 54 55 } 56 } 57 return 0; 58 }
思路: