fork download
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. bool isdigit(char x) { // проверка, является ли символ числом
  5. return (x >= '0' && x <= '9'? 1: 0);
  6. }
  7.  
  8. bool isreal(char* x) { // сама функция синтаксического анализа
  9. if ((!isdigit(*x))||(*x == '+' || *x == '-' && !isdigit(*++x))) return 0;
  10. while (isdigit(*x)) ++x; // счетчик сдвигает указатель до символа, отличного от числа
  11. if (*x == '.' && !isdigit(*++x)) return 0;
  12. while (isdigit(*x))++x;
  13. if ((*x == 'e' || *x == 'E')&&((*++x == '+' || *x == '-')&&(!isdigit(*++x)))) return 0;
  14. while (isdigit(*x)) ++x;
  15. return *x == 0; // закончилось ли число
  16. }
  17.  
  18. int main() {
  19. char x[1000];
  20. int n;
  21. cin >> n;
  22. for (int i = 0;i < n;i++) { // сама проверка
  23. cin >> x; // ввод игнорирует пробелы, которые по условию могут быть до и после числа
  24. cout << (isreal(x) ? "LEGAL" : "ILLEGAL") << "\n";
  25. }
  26. return 0;
  27. }
Success #stdin #stdout 0s 4276KB
stdin
3
542.512e+3
123.456E+42
123.456.789
stdout
LEGAL
LEGAL
ILLEGAL