zoukankan      html  css  js  c++  java
  • [模拟] Jzoj P5820 非法输入

    Description

    在算法竞赛中,题目一般保证了输入数据的合法性。然而在工程开发中,我们往往不期望程 序得到的输入都是合法的。
    D 君正忙着向校内 OJ 添加题目,在写了第 233 个 val.cpp 之后,她的头脑中涌现出了这样 的想法。于是她决定出一道不需要写 val.cpp 的题。
    输入两个整数,你需要做的就是输出她们的和。
     

    Input

    第一行一个正整数 T。
    接下来 T 行,每行代表一组数据。
    一组合法的数据包含由一个空格隔开的两个合法的十进制整数,行首和行尾不包含任何多余 的字符。
    一个合法的十进制整数要么是 0,要么由一个可选的负号,一个 1 到 9 之间的数字,和若干 个 0 到 9 之间的数字顺序连接而成,并且这两个数字均在区间 [−2^31 , 2^31) 之内。
    一组不合法的数据是一个不匹配以上规则的字符串。

    Output

    对于每组数据,如果该数据是合法的请输出一行一个整数代表答案,否则请输出 Input Error。
     

    Sample Input

    6
    1 1
    -1 -1
    1        1
    asdf
    
    2147483648 0

    Sample Output

    2
    -2
    Input Error
    Input Error
    Input Error
    Input Error
     

    Data Constraint

    题解

    • 模拟题,不过细节多多,这是道搞定输入就搞定的题目

    代码

     1 #include <cstdio>
     2 #include <iostream>
     3 #include <cstring>
     4 using namespace std;
     5 long long t,len,zf,l,o,k,start;
     6 long long a,b,res,inf=2147483648;
     7 string s;
     8 bool pd(char c) { return c>='0'&&c<='9'; }
     9 int main()
    10 {
    11     freopen("aplusb.in","r",stdin);
    12     freopen("aplusb.out","w",stdout);
    13     scanf("%lld
    ",&t);
    14     for (long long i=1;i<=t;i++)
    15     {
    16         getline(cin,s);
    17         len=s.length();
    18         if (len==0) 
    19         {
    20             printf("Input Error
    ");
    21             continue;
    22         }
    23         a=0,b=0,zf=0,res=0,l=0,o=0,k=0,start=0;
    24         if (s[0]=='-') zf=1,k++;
    25         else 
    26             if (!pd(s[0]))
    27             {
    28                 printf("Input Error
    ");
    29                 continue;
    30             }
    31         for (;k<len;k++)
    32         {
    33             if (!pd(s[k]))
    34             {
    35                 if (s[k]==' ') break;
    36                 o=1;
    37                 break;
    38             }
    39             if (!start)
    40             {
    41                 if (s[k]=='0') l++;
    42                 else start=1;
    43             }
    44             res=res*10+s[k]-'0';
    45             if ((!zf&&res>=inf)||(zf&&res<-inf))
    46             {
    47                 o=1;
    48                 break;
    49             }
    50         }
    51         if (zf) res=-res;
    52         if (o||k==0||k>=len-1||(zf&&res==0)||l>1||(l&&res))
    53         {
    54             printf("Input Error
    ");
    55             continue;
    56         }
    57         a=res;
    58         zf=0,res=0,l=0,o=0,start=0,k++;
    59         if (s[k]=='-') zf=1,k++;
    60         for (;k<len;k++)
    61         {
    62             if (!pd(s[k]))
    63             {
    64                 o=1;
    65                 break;
    66             }
    67             if (!start)
    68             {
    69                 if (s[k]=='0') l++;
    70                 else start=1;
    71             }
    72             res=res*10+s[k]-'0';
    73             if ((!zf&&res>=inf)||(zf&&res<-inf))
    74             {
    75                 o=1;
    76                 break;
    77             }
    78         }
    79         if (zf) res=-res;
    80         if (o||(zf&&res==0)||l>1||(l&&res))
    81         {
    82             printf("Input Error
    ");
    83             continue;
    84         }
    85         b=res;
    86         printf("%lld
    ",a+b);
    87     }
    88     return 0;
    89 }
  • 相关阅读:
    归并排序(Merge Sort)
    AtCoder AGC035D Add and Remove (状压DP)
    AtCoder AGC034D Manhattan Max Matching (费用流)
    AtCoder AGC033F Adding Edges (图论)
    AtCoder AGC031F Walk on Graph (图论、数论)
    AtCoder AGC031E Snuke the Phantom Thief (费用流)
    AtCoder AGC029F Construction of a Tree (二分图匹配)
    AtCoder AGC029E Wandering TKHS
    AtCoder AGC039F Min Product Sum (容斥原理、组合计数、DP)
    AtCoder AGC035E Develop (DP、图论、计数)
  • 原文地址:https://www.cnblogs.com/Comfortable/p/9494929.html
Copyright © 2011-2022 走看看