多项式加法
【问题描述】编写一个程序,实现两个多项式的加法运算。要求用一个有序的链表表示一个多项式,每一项用一个结点表示。在链表中按照项的幂数进行排列。
【输入形式】两个多项式,用空格隔开。每个多项式中没有空格。每项的系数是浮点数,每项的指数是非负整数。每个多项式降幂排序,已经完全合并同类项。每个多项式字符串的长度小于200。
【输出形式】结果的多项式,同样降幂排序。要求没有多余的正号,没有多余的1的系数,没有多余的1或0的指数。系数如果不省略,则输出3位小数。
【样例输入】x^3-1.3x^2+2 1.3x^2-1.5x-1
【样例输出】x^3-1.500x+1.000
【提示】1. 输出三位小数,可以使用"%.3lf"格式字符串;2. 字符串转浮点数,可以使用stdlib.h中的atof函数
分析:此题难点在于如何从输入的字符串中提取出对应的系数和指数,准确来说逻辑上难度不大,但就是比较繁琐,需要缜密的思维。作者的算法如下:
void transform(char input[N1], float coef0[100], int exp0[100]) {//input是输入的字符串,coef0和exp0是从中提取的系数和指数
int i, j, k, m, mid, mid2;
char coef[100][N1] = {'\0'}, exp[100][N1] = {'\0'};//先初始化,避免后续输出时输出奇怪的数字
int length = strlen(input);
if (length == 1) {//多项式只有一个常数项
exp0[0] = 0;
coef0[0] = atof(input);
exp0[1] = 0;
coef0[1] = 0;
return;
}
for (i = 0, m = 0; i < length; i++) {
if (input[i] == 'x') {//寻找x,以x为定位来寻找系数
/* 提取指数*/
if (input[i + 1] == '^') {//指数不为1
for (j = i +