fork(3) download
  1. <?php
  2.  
  3.  
  4. $input = '1+3*2/0.5=';
  5. $inputLength = mb_strlen($input);
  6. $number = 0;
  7. $result = 0;
  8. $count = 0;//считает количество цифр после точки
  9. $op = '';
  10. $decimalMark = '';
  11. if(preg_match('/[.,]{2,}/u', $input)){
  12. echo "Уберите лишний знак!\n";
  13. exit();
  14. }
  15. for($i = 0; $i < $inputLength; $i++){
  16. $char = mb_substr($input, $i, 1);
  17. if($char == ','|| $char == '.'){
  18. $decimalMark = $char;
  19. }
  20. if($char == '*' || $char =='+' || $char == '-' || $char == '=' || $char == '/'){
  21. $count = 0;
  22. $decimalMark = '';
  23. if($op == '+'){
  24. $result+= $number;
  25. }elseif($op == '-'){
  26. $result-= $number;
  27. }elseif($op == '*'){
  28. $result*= $number;
  29. }elseif($op == '/'){
  30. $result/= $number;
  31. }else{
  32. $result = $number;
  33. }
  34. $op = $char;
  35. $number = 0;
  36. }elseif(is_numeric($char)){
  37. if($decimalMark != ''){
  38. $count++;
  39. $number = $number + $char / pow(10, $count);
  40. $number = floatval($number);
  41. }else{
  42. $number = $number*10+$char;
  43. $number = intval($number);
  44. }
  45. }elseif($char == '.' || $char == ','){
  46. }else{
  47. echo "Неверный символ '$char'\n";
  48. }
  49. }
  50. if($op == '='){
  51. echo $result;
  52. }
Success #stdin #stdout 0.02s 52472KB
stdin
Standard input is empty
stdout
16