P1401题解

· · 题解

题目传送门
这道题我们不难发现,根据两个变量的取值范围 (x_l \leq x \leq x_u, y_l \leq y \leq y_u) 我们可以得出四个 x \times y 的极限值,分别为 x_l \times y_l,x_l \times y_u,x_u \times y_l,x_u \times y_u。最后判断这四个极限值是否大于 2147483647 或小于 -2147483647 即可。
本题需要开 long long,否则会溢出。
代码:

#include<bits/stdc++.h> 
using namespace std;
#define int long long 
const int inf = 2147483647; //临界值
bool f(int x){//该函数的作用是,如果 x 在 int 范围内,返回 false,否则返 回true
    return !(x >= -inf && x <= inf); 
}
signed main(){
    int x1, x2, y1, y2;
    cin >> x1 >> x2 >> y1 >> y2;
    if(f(x1 * y1) || f(x1 * y2) || f(x2 * y1) || f(x2 * y2)){
        cout << "long long int" << endl;
    }
    else{
        cout << "int" << endl;
    }
    return 0;
}