原题链接:表达式计算3
解题思路:
注意事项:
参考代码:
#include <iostream>
#include <cstdlib>
#include <cstdio>
#include <cstring>
#include <stack>
using namespace std;
char ss1[2]={'+','-'};
char ss2[2]={'*','/'};
char ss3[1]={'^'};
int is_ss1(char c) {for(int i=0;i<2;i++) if(c==ss1[i]) return 1; return 0;}
int is_ss2(char c) {for(int i=0;i<2;i++) if(c==ss2[i]) return 2; return 0;}
int is_ss3(char c) {for(int i=0;i<1;i++) if(c==ss3[i]) return 3; return 0;}
int main ()
{
char s[30];
char a[30];
gets(s);
stack<int> num;
stack<char> ch;
int Length=0;
for(int i=0;i<strlen(s);i++) //转换为后缀表达式
{
if(s[i]==' ') continue;
else
if(s[i]>='0'&&s[i]<='9')
{
a[Length++]=s[i];
for(int j=i+1;j<strlen(s);j++,i++)
if(s[j]>='0'&&s[j]<='9') a[Length++]=s[j];
else break;
a[Length++]=' '; //用空格将数字隔开
}
else
{
if(ch.empty()) ch.push(s[i]);
else
{
if(is_ss1(ch.top())&&(!is_ss1(s[i]))) ch.push(s[i]);
else if(is_ss2(ch.top())&&is_ss3(s[i])) ch.push(s[i]);
else
{
a[Length++]=ch.top();
a[Length++]=' ';
ch.pop();
while(!ch.empty())
{
if(is_ss1(ch.top())&&(!is_ss1(s[i]))) break;
else if(is_ss2(ch.top())&&is_ss3(s[i])) break;
else
{
a[Length++]=ch.top();
a[Length++]=' ';
ch.pop();
}
}
ch.push(s[i]);
}
}
}
}
while(!ch.empty()) { a[Length++]=ch.top(); a[Length++]=' '; ch.pop();}
//for(int i=0;i<Length;i++) cout<<a[i];
for(int i=0;i<Length;i++) //计算后缀表达式
{
int x=0,t=1;
if(a[i]==' ') continue;
else
if(a[i]>='0'&&a[i]<='9')
{
for(int j=i;j<Length;j++,i++)
{
if(a[j]>='0'&&a[j]<='9')
{
x=x*10+(a[j]-'0'); //******
}
else break;
}
num.push(x);
//cout<<"..."<<x<<endl;
}
else
{
int j,k;
j=num.top(); num.pop();
k=num.top(); num.pop();
switch(a[i])
{
case '+': k+=j; break;
case '-': k-=j; break;
case '*': k*=j; break;
case '/': k/=j; break;
case '^': int n=k; for(int m=1;m<j;m++) n*=k; k=n;break;
}
//cout<<"..."<<k<<endl;
num.push(k);
}
}
cout<<num.top()<<endl;
num.pop();
//system("pause");
return 0;
}0.0分
1 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复