题目描述
在比赛中,根据数据范围,分析清楚变量的取值范围,是非常重要的。int 类型变量与 int 类型变量相乘,往往可能超出 int 类型可以表示的取值范围。
现在,给出两个 int 类型变量 x,y 及其取值范围,请问 x×y 的值是否可能超过 int 类型可以表示的范围?
提示:int 类型可以表示的范围为 [−2147483648,2147483647][−2147483648,2147483647],即 [−231,231−1][−231,231−1]。也就是,int 类型可以表示的最小值为 −2147483648−2147483648,最大值为 21474836472147483647。
输入格式
输入共两行。
输入的第一行为两个整数 xl,xu,表示变量 �x 的取值范围为xl≤x≤xu。
输入的第二行为两个整数 yl,yu,表示变量 �y 的取值范围为yl≤y≤yu。
输出格式
输出一行一个字符串:
- 若会超过,则输出
long long int
; - 若不会超过,则输出
int
。
输入输出样例
输入 #1复制
1 5 1 5
输出 #1复制
int
输入 #2复制
-2147483647 2147483647 -2147483647 2147483647
输出 #2复制
long long int
说明/提示
数据规模与约定
- 对于 50%50% 的测试数据,0≤��≤��<2310≤xl≤xu<231,0≤��≤��<2310≤yl≤yu<231。
- 对于 100%100% 的测试数据,−231≤��≤��<231−231≤xl≤xu<231,−231≤��≤��<231−231≤yl≤yu<231。
- 思路:没有,转化成longlong
- 代码:
#include<bits/stdc++.h> using namespace std; int main() { long long x1, x2, y1, y2; cin >> x1 >> x2 >> y1 >> y2; if (x2 * y2 > 2147483647 || x1 * y1 > 2147483647 ||x1 * y2 < -2147483648 ||x2 * y1 < -2147483648) //最大值大于int,最小值大于int,如果x1为-,则x1*y2为负数最大值小于int,x2同理 cout << "long long int"; else cout << "int"; return 0; }