社区讨论
站外题求助
学术版参与者 1已保存回复 1
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 1 条
- 当前快照
- 1 份
- 快照标识符
- @lo1alszw
- 此快照首次捕获于
- 2023/10/22 17:55 2 年前
- 此快照最后确认于
- 2023/11/02 18:13 2 年前
数据溢出 (overflow, 1s/256M)
数据溢出是程序员经常会遇到的 bug 之一。例如,32 位无符号整型的数据范围是 而如果一个该类型的变量的取值超过了 ,那么就会导致数据溢出,使得程序运行出不可预料的结果。
所幸的是,在 GCC 版本的 C++ 编译器中,有这样一个可以帮助检查代码中所有 “未定义行为(Undefined Behaviour)” 的检查器(Sanitizer),而数据溢出就是一类未定义行为。如果编译的时候开启这个检查器,那么一旦程序运行的时候出现了未定义行为,那么程序就会返回一个 Runtime Error 的结果。
在本题中,你的任务就是实现检查器中有关数据溢出的部分。具体来说,假设某种无符号数据类型的数据范围是,然后接下来会给出某段程序其中一个变量的变化情况(该变量初始值为),你需要判断该变量是否发生了数据溢出。
输入格式
第一行输入一个正整数,表示数据组数。
对于每一组数据,第一行输入两个正整数,分别表示变量变化次数和该数据类型的范围。
接下来行,每一行的输入都形如如下三种格式之一:
-
x:表示该变量的值加上,即设变量的原值为,那么新值就是
-
x:表示该变量的值乘上,即设变量的原值为,那么新值就是
-
/ x:表示该变量的值除以并向下取整,即设变量的原值为,那么新值就是⌊⌋。其中⌊x⌋ 表示向下取整,例如 ⌊3.1⌋=3 ,⌊0.1⌋=0 ,⌊5⌋=5
注意:本题输入量较大,请使用速度较快的输入方式。
输出格式
对于每一组数据,输出一行一个正整数,表示其最早发生数据溢出的操作次数。如果没有发生数据溢出,则输出一行 Not Overflow。
样例输入
CPP2
5 9999
+ 2
* 10
/ 2
* 1000
/ 1000
5 10000
+ 2
* 10
/ 2
* 1000
/ 1000
样例输出
CPP4
Not Overflow
样例解释
第一组数据的第四步是给变量乘以 1000,之后得到的变量的值是 10000,超过了 9999,故发生了数据溢出。
数据范围
-
对于 30% 的数据,
-
对于 60% 的数据,
-
对于 100% 的数据,
数据保证不会除以 0。
回复
共 1 条回复,欢迎继续交流。
正在加载回复...