P5238 整数校验器 题解

Doveqise

2019-03-03 07:29:17

Solution

T1字符串大模拟,洛谷3月月赛日推,有问题下见 ~~(极长的)~~ 代码注释。 ```cpp #include<bits/stdc++.h> char start[30],end[30],target[200050];//不用string int main() { int a,i,lenth,j,T1=0,T2=0,startlenth,endlenth; scanf("%s%s%d",start,end,&a); startlenth=strlen(start);//读入l endlenth=strlen(end);//读入r if(!a)//第一个数据点没有输入数据 { return 0; } for(i=1;i<=a;i++) { j=1; T1=0; T2=0; scanf("%s",target); lenth=strlen(target); if(lenth==1) { if(target[0]=='0') { if(start[0]!='-'&&start[0]!='0') { printf("2\n"); continue; } else { printf("0\n"); continue; } }//等于0情况 if(target[0]=='-') { printf("1\n"); continue; }//负号特判一下 } if(target[0]=='0') { printf("1\n"); continue; }//以0开头的非法数据 if(target[0]=='-'&&target[1]=='0') { printf("1\n"); continue; }//以-0开头的非法数据 if(lenth>21) { printf("2\n"); continue; }//数字过大溢出 if(target[0]=='-') { if(start[0]!='-') { printf("2\n"); continue; }//负数超过范围 else { if(startlenth>lenth) { T1=1; j=lenth; } if(startlenth<lenth) { printf("2\n"); continue; } while(j<lenth) { if(start[j]!=target[j]) { if(start[j]>target[j]) { T1=1; } if(start[j]<target[j]) { T1=2; } break; } else { j++; } } if(j==lenth&&!T1) { T1=1; } j=0; if(end[0]=='-') { j++; } if(end[0]!='-') { T2=1; j=lenth; } else { if(endlenth<lenth) { printf("2\n"); continue; } if(endlenth>lenth) { T2=1; j=lenth; } } while(j<lenth) { if(end[j]!=target[j]) { if(end[j]>target[j]) { T2=1; } if(end[j]<target[j]) { T2=2; } break; } else { j++; } } if(j==lenth&&!T2) { T2=1; } if(T1==1&&T2==1) { printf("0\n"); continue; } else { printf("2\n"); continue; }//一大坨(划掉)判大小 } } else { if(end[0]=='-') { printf("2\n"); continue; } if(start[0]=='-') { T1=1; } else { if(startlenth<lenth) { T1=1; j=lenth; } if(startlenth>lenth) { printf("2\n"); continue; } } j=0; while(j<lenth) { if(start[j]!=target[j]) { if(start[j]>target[j]) { T1=1; } if(start[j]<target[j]) { T1=1; } break; } else { j++; } } if(j==lenth&&!T1) { T1=1; } j=0; if(endlenth<lenth) { printf("2\n"); continue; } if(endlenth>lenth) { T2=1; j=lenth; } while(j<lenth) { if(end[j]!=target[j]) { if(end[j]>target[j]) { T2=1; } if(end[j]<target[j]) { T2=2; } break; } else { j++; } } if(j==lenth&&!T2) { T2=1; } if(T1==1&&T2==1) { printf("0\n"); continue; } else { printf("2\n"); continue; }//判大小+1 } } return 0; } ```