P5238 整数校验器

xht

2019-03-02 18:55:17

Solution

显然这道题不算难,细心即可AC 细节见代码中的注释 ```cpp #include <bits/stdc++.h> #define ll long long using namespace std; string s, l, r;//对除了数据组数以外的所有数均用string存 inline bool pd0(int l, int r) {//判断是否每一位都符合要求 for (int i = l; i < r; i++) if ('0' <= s[i] && s[i] <= '9') continue; else return 0; return 1; } inline bool pd1() {//判断是否合法 int len = s.length(); if (len == 1 && s[0] == '0') return 1;//0要特判 if (s[0] == '-') {//负数和正数分开判 if ('1' <= s[1] && s[1] <= '9')//判断首位是否符合要求 return pd0(2, len); return 0; } if ('1' <= s[0] && s[0] <= '9') return pd0(1, len); return 0; } inline bool pd(string a, string b) {//判断a是否小于b int lena = a.length(), lenb = b.length(); if (lena == lenb) { int flag = 1; for (int i = 0; i < lena; i++) if (a[i] != b[i]) { flag = 0; break; } if (flag) return 1;//特判相等 } if (a[0] == '-' && b[0] != '-') return 1; if (a[0] != '-' && b[0] == '-') return 0; if (a[0] == '-' && b[0] == '-') {//正数负数分开判 if (lena < lenb) return 0; if (lena > lenb) return 1;//先判长度 for (int i = 1; i < lena; i++) { if (a[i] == b[i]) continue; if (a[i] < b[i]) return 0; return 1; } } if (a[0] != '-' && b[0] != '-') { if (lena > lenb) return 0; if (lena < lenb) return 1; for (int i = 0; i < lena; i++) { if (a[i] == b[i]) continue; if (a[i] > b[i]) return 0; return 1; } } return 0; } inline bool pd2() {//判断是否越界 return pd(l, s) && pd(s, r); } int main() { ios::sync_with_stdio(0);//用了string就必须用cin,加点速 cin >> l >> r; int t; cin >> t; while (t--) { cin >> s; if (!pd1()) {//判断是否输出1 puts("1"); continue; } if (!pd2()) {//判断是否输出2 puts("2"); continue; } puts("0"); } return 0; } ```