5820. 【NOIP提高A组模拟2018.8.16】 非法输入
(File IO): input:aplusb.in output:aplusb.out
Time Limits:
1000 ms Memory Limits: 262144 KB Detailed Limits
Goto ProblemSet
Description
在算法竞赛中,题目一般保证了输入数据的合法性。然而在工程开发中,我们往往不期望程 序得到的输入都是合法的。
D 君正忙着向校内 OJ 添加题目,在写了第 233 个 val.cpp 之后,她的头脑中涌现出了这样 的想法。于是她决定出一道不需要写 val.cpp 的题。
输入两个整数,你需要做的就是输出她们的和。
D 君正忙着向校内 OJ 添加题目,在写了第 233 个 val.cpp 之后,她的头脑中涌现出了这样 的想法。于是她决定出一道不需要写 val.cpp 的题。
输入两个整数,你需要做的就是输出她们的和。
Input
第一行一个正整数 T。
接下来 T 行,每行代表一组数据。
一组合法的数据包含由一个空格隔开的两个合法的十进制整数,行首和行尾不包含任何多余 的字符。
一个合法的十进制整数要么是 0,要么由一个可选的负号,一个 1 到 9 之间的数字,和若干 个 0 到 9 之间的数字顺序连接而成,并且这两个数字均在区间 [−2^31 , 2^31) 之内。
一组不合法的数据是一个不匹配以上规则的字符串。
接下来 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.非法字符
2.非法数字(01,-0,898-之类)
3.空格偏多(少)( 2323 23)
4.数字过大(小)
代码:
#include<iostream> #include<cstdio> #define rii register int i #define int long long #define maxn 2147483647 #define minx -2147483647 using namespace std; int t; long long check(long long num) { if(num>maxn) { return 0; } num++; if(num<minx) { return 0; } return 1; } void pd(int kg,int l,int r,int wa,int wz) { if(wz<2) { puts("Input Error"); return; } if(wa!=0) { puts("Input Error"); return; } if(kg>1) { puts("Input Error"); return; } l+=r; printf("%lld\n",l); } signed main() { freopen("aplusb.in","r",stdin); freopen("aplusb.out","w",stdout); scanf("%lld",&t); getchar(); for(rii=1;i<=t;i++) { int kg=0,num[3]={0,0,0},wz=0,wa=0,cnt=0; char pre=0; while(1) { char c; scanf("%c",&c); cnt++; if(cnt==1&&c!='-') { if(c<'0'||c>'9') { wa++; } } if(c==10) { pd(kg,num[1],num[2],wa,wz); break; } if(wa!=0) { continue; } if(check(num[1])!=1||check(num[2])!=1) { // puts("Input Error"); wa++; // break; } if(c==' ') { kg++; pre=c; continue; } if(c=='-') { if(pre!=' '&&pre!=0) { wa++; } pre=c; continue; } if(c<'0'||c>'9') { wa++; pre=c; continue; } if(c>='0'&&c<='9') { // if(pre=='0'&&) // { // wa++; // } if(pre>='0'&&pre<='9') { num[wz]*=10; if(num[wz]==0&&pre=='0') { wa++; } if(num[wz]>maxn||(num[wz]-1)<minx) { continue; } if(num[wz]>0) { num[wz]+=c-'0'; } else { num[wz]-=c-'0'; } } else { wz++; num[wz]=c-'0'; if(wz>2) { wa++; } else { if(pre=='-') { if(num[wz]==0) { wa++; } num[wz]*=-1; } } } pre=c; } } } }