P1401 [入门赛 #18] 禁止在 int 乘 int 时不开 long long
题目传送门
思路
按照题意,同时存储负数和正数,模拟变量范围即可。由于可能存在着超过 int 的最大值或者最小值等的八种情况,我们只需要全部判断一遍即可。
代码
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll a, b, c, d;
const int INF = 0x3f3f3f3f;
signed main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin >> a >> b >> c >> d;
if (a * d <= -INT_MAX || a * d >= INT_MAX || a * c <= -INT_MAX || a * c >= INT_MAX)
cout << "long long int\n";
else if (b * d <= -INT_MAX - 1 || b * d >= INT_MAX|| b * c <= -INT_MAX - 1|| b * c >= INT_MAX)
cout << "long long int\n";
else cout << "int\n";
return 0;
}