|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
[入门赛 #18] 禁止在 int 乘 int 时不开 long long
题目描述
在比赛中,根据数据范围,分析清楚变量的取值范围,是非常重要的。int 类型变量与 int 类型变量相乘,往往可能超出 int 类型可以表示的取值范围。
现在,给出两个 int 类型变量 x,y 及其取值范围,请问 x * y 的值是否可能超过 int 类型可以表示的范围?
提示:int 类型可以表示的范围为 [-2147483648, 2147483647],即 [-2^{31},2^{31}-1]。也就是,int 类型可以表示的最小值为 -2147483648,最大值为 2147483647。
输入格式
输入共两行。
输入的第一行为两个整数 x_l,x_u,表示变量 x 的取值范围为 x_l \le x \le x_u。
输入的第二行为两个整数 y_l,y_u,表示变量 y 的取值范围为 y_l \le y \le y_u。
输出格式
输出一行一个字符串:
- 若会超过,则输出 `long long int`;
- 若不会超过,则输出 `int`。
样例 #1
样例输入 #1
样例输出 #1
样例 #2
样例输入 #2
- -2147483647 2147483647
- -2147483647 2147483647
复制代码
样例输出 #2
代码如下:
- s1 = input().split()
- s2 = input().split()
- x1 = int(s1[0])
- x2 = int(s1[1])
- y1 = int(s2[0])
- y2 = int(s2[1])
- if x1 * y1 < -2147483647 or x2 * y2 > 2147483647:
- print('long long int')
- else:
- print('int')
复制代码
只得了92
WHY?
漏了一些情况 , 又可能是 x1 * y2 或者 x2 * y1 最大/小
所以建议这样写比较方便
- s1 = input().split()
- s2 = input().split()
- x1 = int(s1[0])
- x2 = int(s1[1])
- y1 = int(s2[0])
- y2 = int(s2[1])
- #这里用 abs 为了判断方便, 遍历了所有情况
- max_res = max(abs(x1*y1), abs(x2*y1), abs(x1*y2), abs(x2*y2))
- if max_res > 2147483647:
- print('long long int')
- else:
- print('int')
复制代码
|
|