程序如下.问题是 当计算乘方的时候无法显示结果(例如:3^3 得不出结果).请高手帮忙改错.
#include <iostream>
#include <stack>
using namespace std;
//定义"+" "-" "*" "/" 运算
int yunsuan(int x,char op,int y)
{
int sum=1;
switch(op){
case'+': return x+y;
case'-': return x-y;
case'*': return x*y;
case'/': return x/y;
case'^':
for (int i=1;i<=y;i++)
sum*=x;
return sum;
}
}
int youxianji(char op1,char op2) //op1和op2分别表示栈内外
{
if(((op1=='+'||op1=='-')&&(op2=='+'||op2=='-'||op2==')'||op2=='#'))|| //比较'+' '-'栈内外的优先级
((op1=='*'||op1=='/')&&(op2=='+'||op2=='-'||op2=='*'||op2=='/'||op2==')'||op2=='#'))|| //比较'*' '/'栈内外的优先级
((op1=='^')&&(op2=='+'||op2=='-'||op2=='*'||op2=='/'||op2==')'||op2=='#')))
return 1; //op1>op2
if((op1=='('&&op2==')')||(op1=='#'&&op2=='#'))
return 0; //op1==op2
else
return -1; //op1<op2
}
void zhuanhua(char &c,stack<int> &STACK1) //STACK1 运算数栈 函数将连续数字字符转化为数值
{ int num=0;
if(((c-'0')>=0&&(c-'0')<=9))
{
while(((c-'0')>=0&&(c-'0')<=9))
{
num=num*10+(c-'0');
cin>>c;
}
STACK1.push(num);
}
}
int main()
{
stack<char> STACK2;
stack<int> STACK1; //STACK1和STACK2表示运算数栈和运算符栈
STACK2.push('#'); //'#'入栈底 当出栈时表示多项式结束
char c,op1,op2,op;
int x,y;
cout<<"输入表达式,以'#'结束:";
cin>>c;
while(c!='#'||STACK2.top()!='#')
{
zhuanhua(c,STACK1); //进入判断两位数以上的数字 并转化成数值
if(c!='+'&&c!='-'&&c!='*'&&c!='/'&&c!='('&&c!=')'&&c!='#')
{
STACK1.push(c); //当c为数值时候 入运算数栈
cin>>c;
}
else //当c为运算符 比较栈内外优先级
{
op1=STACK2.top();
op2=c;
switch(youxianji(op1,op2))
{
case -1: //当栈外优先级高 入运算符栈
STACK2.push(c);
cin>>c;
break;
case 0: //脱括号并接受下一个字符
STACK2.pop();
cin>>c;
break;
case 1: op=STACK2.top(); //取栈顶运算符元素 且出栈
STACK2.pop();
x=STACK1.top(); //取栈顶运算数元素 且出栈
STACK1.pop();
y=STACK1.top();
STACK1.pop();
STACK1.push(yunsuan(y,op,x)); //计算求值 入栈
break;
}
}
}
cout<<"计算结果是:"<<STACK1.top()<<endl;
return 0;
}