先说一下,什么是五则运算,就是在 加减乘除 的基础上面 ,再加上 %,也就是余 【就是求余数啊喂!】
输入的是一条标准的运算式,比如:2*(3+4)*5
注意一下是包含括号的,还有先乘除後加減以及() 優先運算的計算規則
【P.S. %是和乘除一个等级的
整数型 也就是说里面的任何运算都不可以出现非整数的数字,不然会是错误的哟亲 (好吧我是懒得改成浮点数的)】
以下就是程式的代码
[mw_shl_code=cpp,true]#include *本站禁止HTML标签噢*
#include *本站禁止HTML标签噢*
#include *本站禁止HTML标签噢*
#include *本站禁止HTML标签噢*
#include *本站禁止HTML标签噢*
#include *本站禁止HTML标签噢*
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 *本站禁止HTML标签噢* Numstack;
for (i=0;i<a.length();i++)
{if (isdigit(a *本站禁止HTML标签噢* ))
{string c;
while (isdigit(a *本站禁止HTML标签噢* ))
{c+=a *本站禁止HTML标签噢* ;
i++;}
Numstack.push(sti(c));
}
if (isopr(a *本站禁止HTML标签噢* ))
{if (a *本站禁止HTML标签噢* =='+')
{m=Numstack.top();
Numstack.pop();
n=Numstack.top();
Numstack.pop();
Numstack.push(m+n);
}
if (a *本站禁止HTML标签噢* =='-')
{m=Numstack.top();
Numstack.pop();
n=Numstack.top();
Numstack.pop();
Numstack.push(n-m);
}
if (a *本站禁止HTML标签噢* =='*')
{m=Numstack.top();
Numstack.pop();
n=Numstack.top();
Numstack.pop();
Numstack.push(m*n);
}
if (a *本站禁止HTML标签噢* =='/')
{m=Numstack.top();
Numstack.pop();
n=Numstack.top();
Numstack.pop();
Numstack.push(n/m);
}
if (a *本站禁止HTML标签噢* =='%')
{m=Numstack.top();
Numstack.pop();
n=Numstack.top();
Numstack.pop();
Numstack.push(n%m);
}
}
}
cout << Numstack.top() << endl;
}
int main(){
stack *本站禁止HTML标签噢* Oprstack;
string a,b;
int i;
while (getline(cin,a))
{
Oprstack.push('!');
for (i=0;i<a.length();i++)
{if(isdigit(a *本站禁止HTML标签噢* ))
{ while (isdigit(a *本站禁止HTML标签噢* ))
{ b+=a *本站禁止HTML标签噢* ;
i++;}
b+=' ';
}
if(a *本站禁止HTML标签噢* =='(')
{Oprstack.push(a *本站禁止HTML标签噢* );}
if (a *本站禁止HTML标签噢* ==')')
{while (Oprstack.top()!='(')
{b+=Oprstack.top();
b+=' ';
Oprstack.pop();
}
Oprstack.pop();
}
if(isopr(a *本站禁止HTML标签噢* ))
{if (check(a *本站禁止HTML标签噢* )>check(Oprstack.top()))
{Oprstack.push(a *本站禁止HTML标签噢* );
}
else if (check(a *本站禁止HTML标签噢* )<=check(Oprstack.top()))
{while (check(a *本站禁止HTML标签噢* )<=check(Oprstack.top()))
{b+=Oprstack.top();
b+=' ';
Oprstack.pop();
}
Oprstack.push(a *本站禁止HTML标签噢* );
}
}
}
while(Oprstack.top()!='!')
{b+=Oprstack.top();
b+=' ';
Oprstack.pop();}
caculate(b);
}
return 0;
}[/mw_shl_code]
terry182 发表于 2012-8-11 18:57[mw_shl_code=cpp,true]#include
using namespace std;
int main() //你说的代码格式是这个么
是啊是啊,肿么弄的:84:
[查看全文]
@ 我又不告诉我怎么弄这个代码格式,随便TX人不好哟少年!
有点眼花,要是每一段加点说明就好了
非常基础透彻的算法,适合演练。但是其实实用来说不用这么麻烦,我的方法是连数据库直接select 这个字符串算式 from dual 用orcale可行,大概连个excel也行的,excel功能强大,几乎所有电脑都会装
stringstream没用过,我用strtoint,加一个try,万一出错返回错误信息
继续求怎么弄这个代码格式啊#7024!
[查看全文]
