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思路:
直接模拟就好
错误有很多种,下面加以列举
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 ",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; } } } }