Advertisement
IzhanVarsky

Многочлены

Mar 19th, 2019
110
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.99 KB | None | 0 0
  1. #include <iostream>
  2. #include <map>
  3. #include <fstream>
  4.  
  5. using namespace std;
  6.  
  7. int main() {
  8.     ifstream cin("polynomial.in");
  9.     ofstream cout("polynomial.out");
  10.     int n;
  11.     cin >> n;
  12.     for (int i = 0; i < n; i++) {
  13.         map<pair<long, long>, long> NM;
  14.         string expr;
  15.         cin >> expr;
  16.         long koeff = 1;
  17.         long stN = 0;
  18.         long stM = 0;
  19.         unsigned int pos = 0;
  20.         if (expr[0] == '-') {
  21.             koeff = -1;
  22.             pos++;
  23.         }
  24.         for (; pos < expr.length(); pos++) {
  25.             switch (expr[pos]) {
  26.                 case '-': {
  27.                     NM[make_pair(stN, stM)] += koeff;
  28.                     koeff = -1;
  29.                     stN = 0;
  30.                     stM = 0;
  31.                     break;
  32.                 }
  33.                 case '+': {
  34.                     NM[make_pair(stN, stM)] += koeff;
  35.                     koeff = 1;
  36.                     stN = 0;
  37.                     stM = 0;
  38.                     break;
  39.                 }
  40.                 case '*': {
  41.                     break;
  42.                 }
  43.                 case '^': {
  44.                     int prevPos = pos - 1;
  45.                     string s;
  46.                     while (pos + 1 < expr.length() && '0' <= expr[pos + 1] && expr[pos + 1] <= '9') {
  47.                         s += expr[pos + 1];
  48.                         pos++;
  49.                     }
  50.                     if (expr[prevPos] == 'n') {
  51.                         stN += stol(s);
  52.                     } else {
  53.                         stM += stol(s);
  54.                     }
  55.                     break;
  56.                 }
  57.                 case 'n': {
  58.                     if (pos + 1 >= expr.length() || expr[pos + 1] != '^') {
  59.                         stN++;
  60.                     }
  61.                     break;
  62.                 }
  63.                 case 'm': {
  64.                     if (pos + 1 >= expr.length() || expr[pos + 1] != '^') {
  65.                         stM++;
  66.                     }
  67.                     break;
  68.                 }
  69.                 default: {
  70.                     string s;
  71.                     while (pos < expr.length() && '0' <= expr[pos] && expr[pos] <= '9') {
  72.                         s += expr[pos];
  73.                         pos++;
  74.                     }
  75.                     koeff *= stol(s);
  76.                     pos--;
  77.                     break;
  78.                 }
  79.             }
  80.         }
  81.         NM[make_pair(stN, stM)] += koeff;
  82.         string toPrint;
  83.         for (auto &it : NM) {
  84.             long val = it.second;
  85.             long j = it.first.first;
  86.             long k = it.first.second;
  87.             if (val != 0) {
  88.                 if (val == -1) {
  89.                     if (j == 0 && k == 0) {
  90.                         toPrint += "-1";
  91.                     } else {
  92.                         toPrint += '-';
  93.                     }
  94.                 } else if (val == 1) {
  95.                     if (toPrint.length() == 0)
  96.                         toPrint += "1";
  97.                     else {
  98.                         toPrint += "+";
  99.                     }
  100.                 } else if (val > 0) {
  101.                     if (toPrint.length() != 0)
  102.                         toPrint += "+";
  103.                     toPrint += to_string(val);
  104.                 } else {
  105.                     toPrint += to_string(val);
  106.                 }
  107.                 if (j != 0) {
  108.                     if (j == 1) {
  109.                         toPrint += "n";
  110.                     } else {
  111.                         toPrint += "n^";
  112.                         toPrint += to_string(j);
  113.                     }
  114.                 }
  115.                 if (k != 0) {
  116.                     if (k == 1) {
  117.                         toPrint += "m";
  118.                     } else {
  119.                         toPrint += "m^";
  120.                         toPrint += to_string(k);
  121.                     }
  122.                 }
  123.             }
  124.         }
  125.         if (toPrint.length() == 0) cout << "0" << endl;
  126.         else cout << toPrint << endl;
  127.     }
  128.     return 0;
  129. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement