fork download
  1. #include <iostream>
  2. #include <string>
  3. using namespace std;
  4.  
  5. struct complex_number { //создадим структуру комплексных чисел
  6. int real;
  7. int imagine;
  8. };
  9.  
  10. complex_number convert(string term) {
  11. complex_number x;
  12. x.real = 1; //чтобы не вводить отдельные переменные для знака присвоим начальное значение не 0, а 1
  13. x.imagine = 1;
  14. if (term[0] == '-') { //если нулевой символ минус, то меняем значение действительной части на -1;
  15. x.real *= -1;
  16. term.erase(term.begin(), term.begin() + 1); //удаляем минус на нулевой позиции, если он есть, чтобы было легче найти второй знак
  17. }
  18. int index = term.find('+'); //находим индекс знака, если это плюс
  19. if (index == -1) {
  20. index = term.find('-'); //находим индекс знака, если это минус
  21. x.imagine = -1; //меняем значение мнимой части на -1, если второй знак минус
  22. }
  23. x.real *= atoi(&term.substr(0, index)[0]); //находим действительную часть
  24. x.imagine *= atoi(&term.substr(index + 1, term.size() - 2)[0]); //находим мнимую часть
  25. return x; //возвращаем полученное комплексное число
  26. }
  27.  
  28. int main() {
  29. string term1, term2;
  30. char sign;
  31. complex_number convert_term1, convert_term2;
  32. while (cin >> term1 >> sign >> term2) {
  33. convert_term1 = convert(term1); //переводим первую строку в первое слагаемое
  34. convert_term2 = convert(term2); //переводим вторую строку во второе слагаемое
  35. if (sign == '+') { //выполняем действие соответствующее считанному знаку
  36. convert_term1.real += convert_term2.real;
  37. convert_term1.imagine += convert_term2.imagine;
  38. }
  39. else {
  40. convert_term1.real -= convert_term2.real;
  41. convert_term1.imagine -= convert_term2.imagine;
  42. } //если мнимая часть отрицательная, то минус между мнимой и действительной частями выведется сам, а если она положительная, то мы должны вывести плюс вручную
  43. cout << convert_term1.real << (convert_term1.imagine >= 0 ? "+" : "") << convert_term1.imagine << "i" << endl;
  44. }
  45. }
Success #stdin #stdout 0s 4420KB
stdin
12+1i - 12-1i
stdout
0+2i