Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <map>
- #include <fstream>
- using namespace std;
- int main() {
- ifstream cin("polynomial.in");
- ofstream cout("polynomial.out");
- int n;
- cin >> n;
- for (int i = 0; i < n; i++) {
- map<pair<long, long>, long> NM;
- string expr;
- cin >> expr;
- long koeff = 1;
- long stN = 0;
- long stM = 0;
- unsigned int pos = 0;
- if (expr[0] == '-') {
- koeff = -1;
- pos++;
- }
- for (; pos < expr.length(); pos++) {
- switch (expr[pos]) {
- case '-': {
- NM[make_pair(stN, stM)] += koeff;
- koeff = -1;
- stN = 0;
- stM = 0;
- break;
- }
- case '+': {
- NM[make_pair(stN, stM)] += koeff;
- koeff = 1;
- stN = 0;
- stM = 0;
- break;
- }
- case '*': {
- break;
- }
- case '^': {
- int prevPos = pos - 1;
- string s;
- while (pos + 1 < expr.length() && '0' <= expr[pos + 1] && expr[pos + 1] <= '9') {
- s += expr[pos + 1];
- pos++;
- }
- if (expr[prevPos] == 'n') {
- stN += stol(s);
- } else {
- stM += stol(s);
- }
- break;
- }
- case 'n': {
- if (pos + 1 >= expr.length() || expr[pos + 1] != '^') {
- stN++;
- }
- break;
- }
- case 'm': {
- if (pos + 1 >= expr.length() || expr[pos + 1] != '^') {
- stM++;
- }
- break;
- }
- default: {
- string s;
- while (pos < expr.length() && '0' <= expr[pos] && expr[pos] <= '9') {
- s += expr[pos];
- pos++;
- }
- koeff *= stol(s);
- pos--;
- break;
- }
- }
- }
- NM[make_pair(stN, stM)] += koeff;
- string toPrint;
- for (auto &it : NM) {
- long val = it.second;
- long j = it.first.first;
- long k = it.first.second;
- if (val != 0) {
- if (val == -1) {
- if (j == 0 && k == 0) {
- toPrint += "-1";
- } else {
- toPrint += '-';
- }
- } else if (val == 1) {
- if (toPrint.length() == 0)
- toPrint += "1";
- else {
- toPrint += "+";
- }
- } else if (val > 0) {
- if (toPrint.length() != 0)
- toPrint += "+";
- toPrint += to_string(val);
- } else {
- toPrint += to_string(val);
- }
- if (j != 0) {
- if (j == 1) {
- toPrint += "n";
- } else {
- toPrint += "n^";
- toPrint += to_string(j);
- }
- }
- if (k != 0) {
- if (k == 1) {
- toPrint += "m";
- } else {
- toPrint += "m^";
- toPrint += to_string(k);
- }
- }
- }
- }
- if (toPrint.length() == 0) cout << "0" << endl;
- else cout << toPrint << endl;
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement