fork download
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4. queue<double> Num;
  5. queue<char> Sig;
  6. #define MAX -2000000000
  7. double Evit(){
  8. double a=Num.front();
  9. Num.pop();
  10. if(Sig.empty()) return a;
  11. while(Sig.front()=='*' || Sig.front()=='/'){
  12. if(Sig.front()=='*'){
  13. a=a*Num.front();
  14. }else{
  15. if(Num.front()==0) return MAX;
  16. a=a/Num.front();
  17. }
  18. Num.pop();
  19. Sig.pop();
  20. if(Sig.empty()) return a;
  21. }
  22. return a;
  23. }
  24.  
  25. int main()
  26. {
  27. string s;
  28. while(cin>>s){
  29. double ans=0;
  30. stringstream S(s);
  31. double num;
  32. char sig;
  33. while(S>>num){
  34. Num.push(num);
  35. //cout<<"num:"<<num<<endl;
  36. if(S>>sig){
  37. Sig.push(sig);
  38. //cout<<"sig:"<<sig<<endl;
  39. }
  40. }
  41. double a=Num.front();
  42. Num.pop();
  43. bool com=true;
  44. while(!Sig.empty()){
  45. char si=Sig.front();
  46. Sig.pop();
  47. if(si=='+'){
  48. double b=Evit();
  49. //cout<<"hi"<<endl;
  50. if(b==MAX){
  51. com=false;
  52. break;
  53. }
  54. a=a+b;
  55. //cout<<"a:"<<a<<endl;
  56. }else if(si=='-'){
  57. double b=Evit();
  58. if(b==MAX){
  59. com=false;
  60. break;
  61. }
  62. a=a-b;
  63. }else if(si=='*'){
  64. double b=Evit();
  65. if(b==MAX){
  66. com=false;
  67. break;
  68. }
  69. a=a*b;
  70. //cout<<"b:"<<b<<endl;
  71. }else if(si=='/'){
  72. double b=Evit();
  73. if(b==MAX || b==0){
  74. com=false;
  75. break;
  76. }
  77. a=a/b;
  78. }
  79. //cout<<"que"<<endl;
  80. //cout<<"so:"<<Sig.empty()<<endl;
  81. //system("pause");
  82. }
  83. if(com){
  84. cout<<fixed<<setprecision(2)<<a<<endl;
  85. }else{
  86. cout<<"division entre cero"<<endl;
  87. }
  88. }
  89. return 0;
  90. }
Success #stdin #stdout 0s 4404KB
stdin
1+2*3
stdout
7.00