• 2013 NOIP 普及组 第2题 表达式求值


    P1981 表达式求值 (NOIP2013)

    注意:

    (我自己的一些错误和注意点)
    if ((s[i]>=’0′) && (s[i]<=’9′)) 这句话建议加上,因为谁知道在字符串末尾可能会有一些稀奇古怪的东西
    每一个 case 下面都要写上 break 来退出当前 switch 语句(我也不知道为什么,加上以后貌似就对了,之前误判了很多乘号)
    还有,我自己犯了一个错误:我忘记会有连乘的情况,害得我这破题搞了一晚
     
     1 #include <iostream>
     2 #include <cstdlib>
     3 #include <cstdio>
     4 #include <algorithm>
     5 #include <cstring>
     6 using namespace std;
     7 int main()
     8 {
     9     freopen("expr.in","r",stdin);
    10     freopen("expr.ans","w",stdout);
    11     string s;
    12     long long now=0,result=0,time=1,isTime=0;
    13     cin >> s;
    14     int len = s.length();
    15     for (int i=0;i<len;i++)
    16     {
    17         switch(s[i])
    18         {
    19             case '+':
    20             {
    21                 if (isTime)
    22                 {
    23                     result+=time*now;
    24                     result = result%10000;
    25                     isTime=0;
    26                     time=1;
    27                 }
    28                 else
    29                 {
    30                     result+=now;
    31                     result = result%10000;
    32                 }
    33                 now = 0;
    34                 break;
    35             }
    36             case '*':
    37             {
    38                 time*=now;
    39                 time%=10000;
    40                 isTime = 1;
    41                 now=0;
    42                 break;
    43             }
    44             default:
    45             {
    46                 if ((s[i]>='0') && (s[i]<='9'))
    47                 {
    48                     now = (now*10+s[i]-48)%10000;
    49                 }
    50                 break;
    51             }
    52         }
    53     }
    54     if (isTime)
    55     {
    56         result+=time*now;
    57         result = result%10000;
    58     }
    59     else
    60     {
    61         result+=now;
    62         result = result%10000;
    63     }
    64     cout << result << endl;
    65     return 0;
    66 }
  • 相关阅读:
    [2020BUAA软工助教]助教每周小结(week 9)
    关于强制转会的说明
    Windows更新崩溃记~
    WPF 在DataTemplate定义事件触发器不生效的问题
    Github上不去方法
    TCPListener.AcceptTcpClient阻塞进程退出方法
    Lamada 借助All实现ForEach
    WPF 关于在ContextMenu中绑定带参数的命令
    关于WPF.ICommand.CanExcute
    .NET程序员疫情之下找工作现状
  • 原文地址:https://www.cnblogs.com/OIerPrime/p/7674624.html
Copyright © 2020-2023  润新知