题目描述
在比赛中,根据数据范围,分析清楚变量的取值范围,是非常重要的。int 类型变量与 int 类型变量相乘,往往可能超出 int 类型可以表示的取值范围。
现在,给出两个 int 类型变量 \(x,y\) 及其取值范围,请问 \(x\times 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 5
1 5
样例输出 #1
int
样例 #2
样例输入 #2
-2147483647 2147483647
-2147483647 2147483647
样例输出 #2
long long int
提示
数据规模与约定
- 对于 \(50\%\) 的测试数据,\(0 \le x_l \le x_u < 2^{31}\),\(0 \le y_l \le y_u < 2^{31}\)。
- 对于 \(100\%\) 的测试数据,\(-2^{31} \le x_l \le x_u < 2^{31}\),\(-2^{31} \le y_l \le y_u < 2^{31}\)。
思路
水题,考察语言基础语法。
代码实现
#include<bits/stdc++.h>
using namespace std;
const long long maxn=2147483647;
int main()
{
ios::sync_with_stdio(false);
long long x1,x2,y1,y2;
cin>>x1>>x2;
cin>>y1>>y2;
if(x1*y1>maxn||x1*y1<-1*maxn-1||x2*y2<-1*maxn-1||x2*y2>maxn)
{
cout<<"long long int"<<endl;
return 0;
}
cout<<"int"<<endl;
return 0;
}