📄 head.cpp
字号:
#include "node.cpp"
#include <stack>
node cacl(node &x,node &y, node &s)
{
node tmp;
switch(s.sign)
{
case '+': tmp.Fr=x.Fr+y.Fr;
break;
case '-': tmp.Fr=x.Fr-y.Fr;
if(tmp.Fr.fz<0)tmp='!';
break;
case '*': tmp.Fr=x.Fr*y.Fr;
break;
case '/': if(y.Fr.fz==0)
{
tmp='!';
break;
}
tmp.Fr=x.Fr/y.Fr;
break;
}
return tmp;
}
int Sq(const node &x) //计算符号优先级
{
if(x.sign=='(')return 5;
if(x.sign=='*'||x.sign=='/')return 4;
if(x.sign=='+'||x.sign=='-')return 3;
if(x.sign==')')return 2;
return 1;
}
bool caclexp(node e[]) //计算存放在数组中的表达式
{
node x1,x2,x3,x4,s;
stack<node> numbers,signs;
int i;
signs.push(e[0]); //第一个'#'进栈
for(i=1;i<19;i++)
{
s=signs.top();
if(e[i].sign=='^')continue;
if(!e[i].s)numbers.push(e[i]); //如果是运算数则进栈
else{
if(Sq(s)>=Sq(e[i])) //栈顶运算符优先级更大时
{
if(s.sign=='#'&&e[i].sign=='#')break; //如遇到最后一个'#'运算结束
if(s.sign=='(')
{
if(e[i].sign==')'){
signs.pop();
continue;
}
signs.push(e[i]);
continue;
}
x2=numbers.top(); numbers.pop();
x1=numbers.top(); numbers.pop();
x3=signs.top();signs.pop();
x4=cacl(x1,x2,x3);
if(x4.sign=='!')return 0; //有非法运算
numbers.push(x4);
i--;
continue;
}
signs.push(e[i]); //栈顶运算符更小时运算符进栈
}
}
x4=numbers.top();
return(x4.Fr.fz==x4.Fr.fm*24);
}
void prexp(node e[]) //输出一个存放在数组中的表达式
{
int i;
for(i=1;i<18;i++)
{
if(e[i].sign=='^')continue;
if(e[i].s)cout<<e[i].sign;
else cout<<e[i].Fr.fz;
}
cout<<"=24"<<endl;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -