a?b:c运算符号是一个三元运算符号,其语法组成部分如下:
test ? statement1 : statement2
部分 | 描述 |
---|
Test | 任何表达式,只包含问号(“?”),冒号(“:”)和数字。 |
statement1 | 当 test 是 非0 时执行的语句。 |
statement2 | 当 test 是 0 时执行的语句。 |
表达式的值为最后结果。此外,三元运算符号是右结合的。
数据输入输出
本题有多组输入数据,你必须处理到EOF为止。
每组数据给定一个三元运算符表达式(长度不超过200位),表达式中数字的取值范围是-2
31~2
31。
例如,三元运算符表达式
0?2?3:4:5。先计算出
2?3:4的结果是
3, 将表达式化简为
0?3:5,再次计算,即可得表达式最终结果为
5。 输入数据中的表达式保证一定合法。
输入样例
1?2:3?4:5
输出样例
2
-
- #include<iostream>
- #include<stack>
- #include<vector>
- #include<stdio.h>
- #include<string>
- using namespace std;
-
- int main()
- {
- string str;
- int i;long int a,b,c;
- cin>>str;
- while(!cin.eof())
- {
- stack<long int> L;
- for(i=str.size()-1;i>=0;i--)
- {
- a=0;
- int flag=0;
- string s;
- while(str[i]>='0'&&str[i]<='9')
- {
- flag=1;
- s+=str[i];
- --i;
- }
- if(flag==1)
- {
- for(int j=s.size()-1;j>=0;j--)
- a=a*10+s[j]-48;
- L.push(a);
- flag=0;
- }
- while(str[i]=='?')
- {
- --i;
- if(i<0)
- break;
- b=0;
- while(str[i]>='0'&&str[i]<='9')
- {
- b=b*10+str[i]-48;
- --i;
- }
- if(b)
- {
- c=L.top();
- L.pop();
- L.pop();
- L.push(c);
- }
- else
- L.pop();
- }
- if(i<0)
- break;
- }
- cout<<L.top()<<endl;
- L.pop();
- cin>>str;
- }
- return 0;
- }