[入门赛 #18] 禁止在 int 乘 int 时不开 long long
题目描述
在比赛中,根据数据范围,分析清楚变量的取值范围,是非常重要的。int 类型变量与 int 类型变量相乘,往往可能超出 int 类型可以表示的取值范围。
现在,给出两个 int 类型变量 x , y x,y x,y 及其取值范围,请问 x × y x\times y x×y 的值是否可能超过 int 类型可以表示的范围?
提示:int 类型可以表示的范围为 [ − 2147483648 , 2147483647 ] [-2147483648, 2147483647] [−2147483648,2147483647],即 [ − 2 31 , 2 31 − 1 ] [-2^{31},2^{31}-1] [−231,231−1]。也就是,int 类型可以表示的最小值为 − 2147483648 -2147483648 −2147483648,最大值为 2147483647 2147483647 2147483647。
输入格式
输入共两行。
输入的第一行为两个整数 x l , x u x_l,x_u xl,xu,表示变量 x x x 的取值范围为 x l ≤ x ≤ x u x_l \le x \le x_u xl≤x≤xu。
输入的第二行为两个整数 y l , y u y_l,y_u yl,yu,表示变量 y y y 的取值范围为 y l ≤ y ≤ y u y_l \le y \le y_u yl≤y≤yu。
输出格式
输出一行一个字符串:
- 若会超过,则输出
long long int
; - 若不会超过,则输出
int
。
样例 #1
样例输入 #1
1 5
1 5
样例输出 #1
int
样例 #2
样例输入 #2
-2147483647 2147483647
-2147483647 2147483647
样例输出 #2
long long int
提示
数据规模与约定
- 对于 50 % 50\% 50% 的测试数据, 0 ≤ x l ≤ x u < 2 31 0 \le x_l \le x_u < 2^{31} 0≤xl≤xu<231, 0 ≤ y l ≤ y u < 2 31 0 \le y_l \le y_u < 2^{31} 0≤yl≤yu<231。
- 对于 100 % 100\% 100% 的测试数据, − 2 31 ≤ x l ≤ x u < 2 31 -2^{31} \le x_l \le x_u < 2^{31} −231≤xl≤xu<231, − 2 31 ≤ y l ≤ y u < 2 31 -2^{31} \le y_l \le y_u < 2^{31} −231≤yl≤yu<231。
我的代码
#include<bits/stdc++.h>
using namespace std;
#define int long long
int a,b,c,d;
signed main(){
cin>>a>>b>>c>>d;
if(a*c<-2147483648||a*c>2147483647||b*d<-2147483648||b*d>2147483647||a*d<-2147483648||a*d>2147483647||b*c<-2147483648||b*c>2147483647){
cout<<"long long int";
}else{
cout<<"int";
}
return 0;
}