Content

给定两个整数 \(l,r\),再给定 \(T\) 个整数,请判断对于每个整数 \(x\),是否满足以下要求:

  • \(x\in[l,r]\)。
  • \(x\) 格式合法。

数据范围:\(-2^{63}\leqslant l,r\leqslant 2^{63}-1,0\leqslant T\leqslant 512\)。

Solution

一道模拟题。

我们先来判断这个数是否格式合法。格式不合法的情况有以下几种:

  • 只有单独的一个负号。
  • 以 \(0\) 开头且长度不为 \(1\)。
  • 以一个负号和一个 \(0\) 开头。

这些特判完以后我们就来看这个数如何处理。由于这个数可能很大,所以在 C++ 语言中直接用普通的整型变量读入肯定是不科学的。所以一开始只能够用字符串来读入,然后就开始将其转化为数字,注意一定要看是否会超过 \(\textsf{long long}\) 的范围,一旦超过了就得结束此次判断。

如果转换完了,再看这个数字是否在这个范围里面。

Code

int t;
long long l, r; bool judge1(string s) {
int len = s.size();
if(len != 1 && s[0] == '0') return 1;
if(len == 1 && s[0] == '-') return 1;
if(s[0] == '-' && s[1] == '0') return 1;
return 0;
} int main() {
l = Rll, r = Rll, t = Rint;
while(t--) {
string s; cin >> s;
int len = s.size(), flag = 1; unsigned long long x = 0ll, f = 1ll;
if(judge1(s)) puts("1");
else {
if(s[0] == '-') f = -1ll;
for(int i = (s[0] == '-' ? 1 : 0); i < len; ++i) {
if(x > 922337203685477580ll || (x == 922337203685477580ll && ((f == 1ll && s[i] > '7') || (f == -1ll && s[i] > '8')))) {flag = 0; break;}
x = x * 10 + s[i] - '0';
}
long long res = x * f;
if(!flag || (res < l || res > r)) puts("2");
else puts("0");
}
}
return 0;
}

LuoguP5238 整数校验器 题解的更多相关文章

  1. P5238 整数校验器

    题目地址:P5238 整数校验器 显然这道题不算难,细心即可AC 细节见代码中的注释 #include <bits/stdc++.h> #define ll long long using ...

  2. 洛谷 P5238 整数校验器

    题目描述 有些时候需要解决这样一类问题:判断一个数 x 是否合法. x 合法当且仅当其满足如下条件: x 格式合法,一个格式合法的整数要么是 0,要么由一个可加可不加的负号,一个 1 到 9 之间的数 ...

  3. 洛谷P5238 整数校验器

    看到没有边读入边处理的,我来水一发 我们要看一下有那些情况是格式不合法的 单独的负号 -0(后面可以有其他数字) 0 +(后面一些数字) 我们用快速读入的方法 读取字符进行处理 还有可能超出范围的 考 ...

  4. struts_23_xwork校验器列表使用例子

    required 必填校验器 <field-validator type="required"> <message>性别不能为空!</message& ...

  5. struts_22_xwork校验器列表使用说明

    系统提供的校验器列表如下: required (必填校验器,要求field的值不能为null) requiredstring (必填字符串校验器,要求field的值不能为null,并且长度大于0,默认 ...

  6. Struts2内建校验器(基于校验框架的文件校验)

    位于xwork-2.0.4.jar压缩包中( com.opensymphony.xwork2.validator.validators)有个文件default.xml ,该文件中定义了Struts2框 ...

  7. 使用 Struts2 校验器校验用户注册信息

    基于验证框架的输入校验 一.创建一个struts2项目testValidators.Struts2 初体验:http://www.cnblogs.com/likailan/p/3280820.html ...

  8. Struts 2 之校验器

    对于输入校验,Struts2提供了两种方式,1.使用validate方法:2.基于XML配置实现 . validate()方法 支持校验的Action必须实现Validateable接口,一般直接继承 ...

  9. Struts2内置校验器——完整实例代码

    一.校验器的配置风格 1.字段校验器: <field name="被校验的字段"> <field-validator type="校验器名"& ...

随机推荐

  1. lambda函数实现链表的小根堆

    struct ListNode { int val; ListNode *next; ListNode() : val(0), next(nullptr) {} explicit ListNode(i ...

  2. 【JavaSE】JDK配置

    Java开发环境配置 2020-09-10  08:32:20  by冲冲 1. Windows7安装JDK 1.1 下载JDK ① 下载地址:http://www.oracle.com/techne ...

  3. idea给类增加注释

    File-->Settings-->Editor-->File and Code Templates 找到class #if (${PACKAGE_NAME} && ...

  4. Go语言核心36讲(Go语言实战与应用十九)--学习笔记

    41 | io包中的接口和工具 (下) 上一篇文章中,我主要讲到了io.Reader的扩展接口和实现类型.当然,io代码包中的核心接口不止io.Reader一个. 我们基于它引出的一条主线,只是io包 ...

  5. 洛谷 P6349 - [PA2011]Kangaroos(KDT+标记下放)

    洛谷题面传送门 KDT 上打标记的 hot tea. 考虑将询问 \(A,B\) 看作二维平面直角坐标系上的一个点 \((A,B)\),那么我们这样考虑,我们从左到右扫过全部 \(n\) 个区间并开一 ...

  6. Unique Path AGC 038 D

    Unique Path AGC 038 D 考虑如果两个点之间只能有一个边它们就把它们缩起来,那么最后缩起来的每一块都只能是一棵树. 如果两个点之间必须不止一个边,并且在一个连通块,显然无解. 首先把 ...

  7. BZOJ3971 [WF2013]Матрёшка

    *XXXIV. BZOJ3971 [WF2013]Матрёшка 摘自 DP 做题记录 II 例题 XXXIV. 仍然是神仙区间 DP. 直接设状态 \(f_{i,j}\) 表示区间 \([i,j] ...

  8. 学习Java 2021/10/7

    java重写Override 重载Overload 重写是子类对父类的允许访问的方法的实现过程进行重新编写,返回值和形参都不能改变.即外壳不变,核心重写 重写规则: 参数列表与被重写方法的参数列表必须 ...

  9. Function Overloading in C++

    In C++, following function declarations cannot be overloaded. (1)Function declarations that differ o ...

  10. JConsole可视化工具

    JConsole基本介绍 Jconsole (Java Monitoring and Management Console),一种基于JMX的可视化监视.管理工具.JConsole 基本包括以下基本功 ...