fork download
  1. <?php
  2.  
  3.  
  4. $input = '243+6743/3-78*2=';
  5. $inputLength = mb_strlen($input);
  6.  
  7. $number = 0 ; // Текущее число, которое набирает пользователь
  8. $result = 0; // Результат предыдущих действий
  9. $op = ''; // Предыдущая операция
  10.  
  11. for ($i = 0; $i < $inputLength; $i++){
  12. $char = mb_substr($input , $i, 1);
  13. if($char == '*' || $char == '+' || $char == '-' || $char == '=' || $char == '/'){
  14. echo "op = [{$op}], result = [{$result}], number = [{$number}], char = [{$char}]\n";
  15. switch($op){
  16. case '*':
  17. $result = $result * $number;
  18. break;
  19. case '+':
  20. $result = $result + $number;
  21. break;
  22. case '-':
  23. $result = $result - $number;
  24. break;
  25. case '/':
  26. $result = round($result / $number,2);
  27. break;
  28. default:
  29. $result = $number;
  30. break;
  31. }
  32. $op = $char;
  33. $number = 0;
  34. if($char == '='){
  35. echo "Ответ: {$input}{$result}\n";
  36. exit();
  37. }
  38. }elseif (is_numeric($char)){
  39. $number = $number*10+intval($char);
  40. }else{
  41. echo "Неверный символ: '$char'\n";
  42. }
  43. }
Success #stdin #stdout 0.02s 24400KB
stdin
Standard input is empty
stdout
op = [], result = [0], number = [243], char = [+]
op = [+], result = [243], number = [6743], char = [/]
op = [/], result = [6986], number = [3], char = [-]
op = [-], result = [2328.67], number = [78], char = [*]
op = [*], result = [2250.67], number = [2], char = [=]
Ответ: 243+6743/3-78*2=4501.34