?? 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 + -