表达式求值 (字符串)

表达式求值

https://ac.nowcoder.com/acm/problem/16539

用ti来判断是否要有乘法,如果有乘法的话ti的值为上个数的值,即为要乘的数,直接用sign乘上ti就得到这个值了,如果ti==-1就代表暂时没有乘法,只需要正常进行加法运算就可以。
输出后四位一直%10000就可以了。

#include<iostream>
using namespace std;
int main(){
    string s;
    cin>>s;
    int n=s.length();
    int ans=0;
    int ti=-1;
    int i=0;
    while(i<n){
        int sign=0;
        while(i<n&&s[i]>='0'&&s[i]<='9'){
             sign=(s[i]-'0'+sign*10)%10000;
             i++;
        }
        if(i==n||s[i]=='+'){
            if(ti!=-1){
                ti=ti*sign%10000;
                ans+=ti;
                ans=ans%10000;
                ti=-1;
            }
            else{
                ans=ans+sign;
                ans=ans%10000;
            }
        }
        else if(s[i]=='*'){
            if(ti==-1){
                ti=1;
            }
            ti=ti*sign%10000;
        }
        i++;
    }
    cout<<ans<<endl;
    return 0;
}
全部评论
大佬,想请教一下,你是如何避免先后顺序的,万一后面有何乘法需要先算,而你算了加法怎么办。我看懂了 while(i<n>='0'&&s[i]<='9'){ sign=(s[i]-'0'+sign*10)%10000; i++; } 是求每一个值的,接下来的 if(i==n||s[i]=='+'){ if(ti!=-1){ ti=ti*sign%10000; ans+=ti; ans=ans%10000; ti=-1; } 是做什么的呢</n>
点赞 回复 分享
发布于 2021-09-14 11:08

相关推荐

11-01 20:03
已编辑
门头沟学院 算法工程师
Amazarashi66:这种也是幸存者偏差了,拿不到这个价的才是大多数
点赞 评论 收藏
分享
1 收藏 评论
分享
牛客网
牛客企业服务