题意:给出一个数字计算式,包含+,-,*,/四种符号,计算值
题解:最大坑点:不能仅仅判断第一个是0就结束计算,有可能有:0 + 1这样的情况
所以1.判断第一个是否是0,如果是,则判断下一个符号是否是‘\n‘
2.读入数字和运算符,如果是*,/,取出栈顶元素直接计算完成后压栈,如果是-,将数字相反数压栈,如果是+,将数字压栈。
3.计算栈内元素之和
1 #include<iostream> 2 #include<cstdio> 3 #include<algorithm> 4 #include<stack> 5 using namespace std; 6 stack<double> st; 7 int main() 8 { 9 int x; 10 while(true) 11 { 12 scanf("%d",&x); 13 char c; 14 c=getchar(); 15 if(x==0&&c==‘\n‘) 16 { 17 break; 18 } 19 while(!st.empty()) 20 { 21 st.pop(); 22 } 23 st.push(x); 24 while(true) 25 { 26 if(c==‘\n‘) 27 { 28 break; 29 } 30 while(c==‘ ‘) 31 { 32 c=getchar(); 33 } 34 scanf("%d",&x); 35 if(c==‘*‘) 36 { 37 double tmp=st.top(); 38 st.pop(); 39 st.push(tmp*x); 40 } 41 if(c==‘/‘) 42 { 43 double tmp=st.top(); 44 st.pop(); 45 st.push(tmp/x); 46 } 47 if(c==‘-‘) 48 { 49 st.push(-x); 50 } 51 if(c==‘+‘) 52 { 53 st.push(x); 54 } 55 c=getchar(); 56 } 57 double res=0; 58 while(!st.empty()) 59 { 60 res+=st.top(); 61 st.pop(); 62 } 63 printf("%.2lf\n",res); 64 } 65 return 0; 66 }
时间: 2024-10-24 06:32:56