Advertisement
Kwwiker

Римские

Dec 16th, 2020
741
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.16 KB | None | 0 0
  1. /*
  2. * ДЗ 4 Задача "Автоматный распознаватель"
  3. */
  4. int detect(char c) {
  5.     switch (c) {
  6.     case 'I': return 1;
  7.     case 'V': return 5;
  8.     case 'X': return 10;
  9.     case 'L': return 50;
  10.     case 'C': return 100;
  11.     case 'D': return 500;
  12.     case 'M': return 1000;
  13.     default: return 0;
  14.     }
  15. }
  16.  
  17. void numDetector() {
  18.     cout << "Введите число римскими цифрами:\nI - 1, V - 5, X - 10, L - 50, C - 100, D - 500, M - 1000" << endl;
  19.     string line;
  20.     long long sum = 0;
  21.     getline(cin >> ws, line);
  22.     string num = "";
  23.     for (int i = 0; i < line.size(); i++) {
  24.         if (line[i] == 'I' or line[i] == 'V' or line[i] == 'X' or line[i] == 'L' or line[i] == 'C' or line[i] == 'D' or line[i] == 'M') {
  25.             num += line[i];
  26.         }
  27.     }
  28.     cout << "Исходная запись: " << num << endl;
  29.     for (int i = num.size() - 2; i >= 0; i--) {
  30.         if (detect(num[i]) >= detect(num[i+1])) {
  31.             if (sum == 0) {
  32.                 sum += detect(num[i]) + detect(num[i + 1]);
  33.             }
  34.             else {
  35.                 sum += detect(num[i]);
  36.             }
  37.         }
  38.         else {
  39.             if (sum == 0) {
  40.                 sum += detect(num[i + 1]) - detect(num[i]);
  41.             }
  42.             else {
  43.                 sum -= detect(num[i]);
  44.             }
  45.         }
  46.     }
  47.     cout << "Итоговая запись: " << sum << endl;
  48. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement