社区讨论

有两个测试数据不正确,帮我看看哪里有问题吧,感谢感谢感谢!!!!

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 条回复,欢迎继续交流。

正在加载回复...