社区讨论
有两个测试数据不正确,帮我看看哪里有问题吧,感谢感谢感谢!!!!
P1981[NOIP 2013 普及组] 表达式求值参与者 1已保存回复 0
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @lo3jmo4h
- 此快照首次捕获于
- 2023/10/24 07:43 2 年前
- 此快照最后确认于
- 2023/10/24 07:43 2 年前
CPP
#include<iostream>
#include<cstring>
using namespace std;
int compare(char str1,char str2){
switch(str1){
case '+': case '-':
if(str2=='('||str2=='#') return 1;
else return -1;
break;
case '*': case '/':
if(str2=='*'||str2=='/') return -1;
else return 1;
break;
case '(':
return 1;
break;
case ')':
if(str2=='(') return 0;
else return -1;
break;
case'#':
if(str2=='#') return 0;
else return -1;
break;
default:
break;
}
}
long long compute(string str){
long long a=0,b=0;
long long num[100000];
char sign[100000];
sign[0]='#';
long long top1=-1,top2=0;
for( long long i=0;str[i]!='\0';){
if(str[i]>='0'&&str[i]<='9'){
a=b*10+(str[i++]-'0');
b=a;
}
else{
if(a>0){
num[++top1]=a;
a=0,b=0;
}
int k=compare(str[i],sign[top2]);
if(k==1) sign[++top2]=str[i++];
else if(k==-1){
long long y=num[top1--];
long long x=num[top1--];
char op=sign[top2--];
long long z=0;
switch(op){
case '+' : z=(x+y)%10000; break;
case '-': z=(x-y)%10000; break;
case '*': z=(x*y)%10000; break;
case '/': z=(x/y)%10000; break;
default: break;
}
num[++top1]=z;
}
else{
top2--;
i++;
}
}
}
return num[top1];
}
int main(){
string str;
cin>>str;
str=str+'#';
long long result=0;
result=compute(str)%10000;
cout<<result;
return 0;
}
回复
共 0 条回复,欢迎继续交流。
正在加载回复...