P1401 [入门赛 #18] 禁止在 int 乘 int 时不开 long long

发布时间 2023-12-11 17:12:40作者: j1hx

题目描述

在比赛中,根据数据范围,分析清楚变量的取值范围,是非常重要的。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;
}