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 }
  • 相关阅读:
    布局管理器
    下拉列表框
    时间,日期选择器
    关于部分基本控件的使用
    关于Activity
    什么时候修改class
    JavaScript Break 和 Continue 语句
    JavaScript While 循环
    JavaScript For 循环
    JavaScript Switch 语句
  • 原文地址:https://www.cnblogs.com/Comfortable/p/9494929.html
Copyright © 2011-2022 走看看