• P1981 表达式求值


    题目描述

    给定一个只包含加法和乘法的算术表达式,请你编程计算表达式的值。

    输入输出格式

    输入格式:

    输入文件为 expr.in。

    输入仅有一行,为需要你计算的表达式,表达式中只包含数字、加法运算符“+”和乘

    法运算符“*”,且没有括号,所有参与运算的数字均为 0 到 2^31-1 之间的整数。输入数据保

    证这一行只有 0~ 9、+、*这 12 种字符。

    输出格式:

    输出文件名为 expr.out。

    输出只有一行,包含一个整数,表示这个表达式的值。注意:当答案长度多于 4 位时,

    请只输出最后 4 位,前导 0 不输出。

    输入输出样例

    输入样例#1: 复制
    1+1*3+4
    
    输出样例#1: 复制
    8
    输入样例#2: 复制
    1+1234567890*1
    输出样例#2: 复制
    7891
    输入样例#3: 复制
    1+1000000003*1
    输出样例#3: 复制
    4

    说明

    对于 30%的数据,0≤表达式中加法运算符和乘法运算符的总数≤100;

    对于 80%的数据,0≤表达式中加法运算符和乘法运算符的总数≤1000;

    对于 100%的数据,0≤表达式中加法运算符和乘法运算符的总数≤100000。

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #include<stack>
    #include<string>
    using namespace std;
    
    const int N=1e6+5;
    
    char s[N];
    int num,ans;
    stack<int> A;
    stack<char> B;
    int main()
    {
    //    freopen("testdata.in","r",stdin);
        int a,b;
        char c;
        scanf("%s",s);
        int len=strlen(s);
        for(int i=0;i<len;++i)
        {
            if(isdigit(s[i]))
            {
                num=0;
                while(isdigit(s[i]))
                {
                    num=num*10+s[i]-'0';
                    ++i;
                }
                num%=10000;
                A.push(num);
                --i;
            }
            else if(s[i]=='*')
            {
                ++i;
                num=0;
                while(isdigit(s[i]))
                {
                    num=num*10+s[i]-'0';
                    ++i;
                }
                num%=10000;
                a=A.top(),A.pop();
                num*=a;
                num%=10000;
                A.push(num);
                --i;
            }
        }
        while(!A.empty())
        {
            ans+=A.top();
            A.pop();
        }
        printf("%d",ans%10000);
        return 0;
    }
  • 相关阅读:
    主流的Nosql数据库的对比
    CCF考试真题题解
    排序
    2017-10-03-afternoon
    POJ——T 2728 Desert King
    51Nod——T 1686 第K大区间
    POJ——T 2976 Dropping tests
    2017-10-02-afternoon
    入参是小数的String,返回小数乘以100的String
    银联支付踩过的坑
  • 原文地址:https://www.cnblogs.com/lovewhy/p/8682886.html
Copyright © 2020-2023  润新知