- UID
- 171136
- 在线时间
- 0 小时
- 最后登录
- 2016-9-11
- 注册时间
- 2012-8-8
- 宅魂
- 643 点
- 贡献
- 202 点
- 宅币
- 5694 枚
- 宅の石(入宅度)
- 0 块
- 元气(技能点)
- 11 点
- 活跃
- -2 ℃
- 听众
- 6
- 收听
- 0
该用户从未签到
序章
- 积分
- 8779
|
先说一下,什么是五则运算,就是在 加减乘除 的基础上面 ,再加上 %,也就是余 【就是求余数啊喂!】
输入的是一条标准的运算式,比如:2*(3+4)*5
注意一下是包含括号的,还有先乘除後加減以及() 優先運算的計算規則
【P.S. %是和乘除一个等级的
整数型 也就是说里面的任何运算都不可以出现非整数的数字,不然会是错误的哟亲 (好吧我是懒得改成浮点数的)】
以下就是程式的代码
[mw_shl_code=cpp,true]#include <cctype>
#include <iostream>
#include <sstream>
#include <string>
#include <stack>
#include <queue>
using namespace std;
int sti(string a)
{stringstream b;
int k;
b << a;
b >> k;
return k;
}
int isopr(char c)
{if (c=='+' || c=='/' || c=='%' || c=='-' || c=='*' )
{return 1;}
else
return 0;
}
int check(char c)
{if (c=='*' || c=='/' || c=='%')
{return 3;}
if (c=='+' || c=='-')
{return 2;}
else
return 0;
}
void caculate (string a)
{int i,m,n;
stack<int> Numstack;
for (i=0;i<a.length();i++)
{if (isdigit(a<i>))
{string c;
while (isdigit(a<i>))
{c+=a<i>;
i++;}
Numstack.push(sti(c));
}
if (isopr(a<i>))
{if (a<i>=='+')
{m=Numstack.top();
Numstack.pop();
n=Numstack.top();
Numstack.pop();
Numstack.push(m+n);
}
if (a<i>=='-')
{m=Numstack.top();
Numstack.pop();
n=Numstack.top();
Numstack.pop();
Numstack.push(n-m);
}
if (a<i>=='*')
{m=Numstack.top();
Numstack.pop();
n=Numstack.top();
Numstack.pop();
Numstack.push(m*n);
}
if (a<i>=='/')
{m=Numstack.top();
Numstack.pop();
n=Numstack.top();
Numstack.pop();
Numstack.push(n/m);
}
if (a<i>=='%')
{m=Numstack.top();
Numstack.pop();
n=Numstack.top();
Numstack.pop();
Numstack.push(n%m);
}
}
}
cout << Numstack.top() << endl;
}
int main(){
stack<char> Oprstack;
string a,b;
int i;
while (getline(cin,a))
{
Oprstack.push('!');
for (i=0;i<a.length();i++)
{if(isdigit(a<i>))
{ while (isdigit(a<i>))
{ b+=a<i>;
i++;}
b+=' ';
}
if(a<i>=='(')
{Oprstack.push(a<i>);}
if (a<i>==')')
{while (Oprstack.top()!='(')
{b+=Oprstack.top();
b+=' ';
Oprstack.pop();
}
Oprstack.pop();
}
if(isopr(a<i>))
{if (check(a<i>)>check(Oprstack.top()))
{Oprstack.push(a<i>);
}
else if (check(a<i>)<=check(Oprstack.top()))
{while (check(a<i>)<=check(Oprstack.top()))
{b+=Oprstack.top();
b+=' ';
Oprstack.pop();
}
Oprstack.push(a<i>);
}
}
}
while(Oprstack.top()!='!')
{b+=Oprstack.top();
b+=' ';
Oprstack.pop();}
caculate(b);
}
return 0;
}[/mw_shl_code]
|
评分
-
查看全部评分
|