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; 
}