fork(2) download
  1. <?php
  2.  
  3. //Калькулятор 2
  4.  
  5. //$input = '243+6743-78*2='; //13816
  6. //$input = '7+2/2='; //4.5
  7. $input = "321.5+3/2-5=";
  8. $inputLength = mb_strlen($input);
  9.  
  10. $number = 0; //Текущее число
  11. $result = 0; //Результат предыдущих действий
  12. $op = ''; // Предыдущая операция
  13. $digit = '';
  14.  
  15. for ($i = 0; $i < $inputLength; $i++) {
  16. $char = mb_substr($input, $i, 1);
  17. if ($char == '*' || $char == '+' || $char == '-' || $char == '=' || $char == '/') {
  18. $number = floatval($digit);
  19.  
  20. if ($op == '+') {
  21. $result += $number;
  22. }
  23.  
  24. if ($op == '-') {
  25. $result -= $number;
  26. }
  27.  
  28. if ($op == '*') {
  29. $result *= $number;
  30. }
  31.  
  32. if ($op == '/') {
  33. $result /= $number;
  34. }
  35.  
  36. echo "op=[{$op}] result = [{$result}] number = [{$number}] char = [{$char}] \n";
  37.  
  38. if ($result == 0) {
  39. $result = $number;
  40. }
  41. $op = $char;
  42. $digit = '';
  43.  
  44. if ($char == "=") {
  45. echo "Ответ: {$input}{$result}";
  46. }
  47.  
  48. } elseif (is_numeric($char) || $char == '.') {
  49. $digit .= $char;
  50. } else {
  51. echo "Неверный символ: {$char}\n";
  52. }
  53.  
  54. }
  55.  
Success #stdin #stdout 0.02s 52472KB
stdin
Standard input is empty
stdout
op=[]  result = [0]  number = [321.5] char = [+] 
op=[+]  result = [324.5]  number = [3] char = [/] 
op=[/]  result = [162.25]  number = [2] char = [-] 
op=[-]  result = [157.25]  number = [5] char = [=] 
Ответ: 321.5+3/2-5=157.25