数据结构与算法实验题 2.2 简单实系数一元多项式问题
第一行有一个正整数 k,表示有 k 个一元实系数多项式。接下来有 k(k<=20)个数据块,每个数据块的第 1行是 1 个正整数
s,表示该数据块共有 s行。接下来的 s 行中,每行由实数 a和整数 b组成,表示多项式中的项 a x b 。紧接着 k
个数据块的是长度为 k-1 的字符串,每个字符是“+”,“-”,“*”这 3 个字符之一。★数据输出:
文件的第一行是计算得到的多项式 g(x),输出多项式时, x k 用 x^k 表示。例如, 5 x k 应表示为
5x^5。注意输出的结果应该符合数学中手写习惯。例如,x不应输出为 1x^1,实系数 保留 6位有效数字。(数据保证多项式项数不大于
500)★补充说明
整数 b 满足 b 为非负整数
输出的多项式结果,按项的幂次从高到低排序,参见样例
★Hint
c++中可以使用 setprecision 操作符来控制显示浮点数值的有效数的数量
分析:
主要是处理细节,利用好map原本自带排序的性质。
这道题就是繁琐并不难。
算法不需要优化,有兴趣的可以看看多项式乘法 – 傅里叶变化
代码:
#include<bits/stdc++.h>
#define LL long long
#define ms(s) memset(s, 0, sizeof(s))
#define REP(i, a, b) for(int i = (a); i < (b); i++)
#define INF 0X7fffffff
using namespace std;
const int maxn = 20 + 5;
struct Node {
// 系数 指数
double coe;
int exp;
Node(double coe, int exp):coe(coe), exp(exp) {
}
Node() {
}
};
vector<Node> data[maxn];
string symbol;
map<int, double> map1, map2, map3; //指数 -> 系数
void add() {
for(map<int, double>::iterator it = map2.begin();
it != map2.end(); it++) {
double coe = it->second;
int exp = it->first;
if(map1.count(exp)) {
map1[exp] += it->second;
} else {
map1[exp] = it->second;
}
}
}
void div

这是一个关于数据结构与算法的实验题目,涉及实系数一元多项式的处理。题目要求读取多项式,进行操作并按照特定格式输出。关键在于利用map的排序特性处理多项式项,并确保输出格式符合要求。解决方案可能涉及到C++的setprecision来控制浮点数精度。

787

被折叠的 条评论
为什么被折叠?



