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

题目描述

在比赛中,根据数据范围,分析清楚变量的取值范围,是非常重要的。int 类型变量与 int 类型变量相乘,往往可能超出 int 类型可以表示的取值范围。

现在,给出两个 int 类型变量 x,y 及其取值范围,请问 x×y 的值是否可能超过 int 类型可以表示的范围?

提示:int 类型可以表示的范围为 [−2147483648,2147483647][−2147483648,2147483647],即 [−231,231−1][−231,231−1]。也就是,int 类型可以表示的最小值为 −2147483648−2147483648,最大值为 21474836472147483647。

输入格式

输入共两行。

输入的第一行为两个整数 xl​,xu​,表示变量 �x 的取值范围为xl​≤x≤xu​。

输入的第二行为两个整数 yl​,yu​,表示变量 �y 的取值范围为yl​≤y≤yu​。

输出格式

输出一行一个字符串:

  • 若会超过,则输出 long long int
  • 若不会超过,则输出 int

输入输出样例

输入 #1复制

1 5
1 5

输出 #1复制

int

输入 #2复制

-2147483647 2147483647
-2147483647 2147483647

输出 #2复制

long long int

说明/提示

数据规模与约定

  • 对于 50%50% 的测试数据,0≤��≤��<2310≤xl​≤xu​<231,0≤��≤��<2310≤yl​≤yu​<231。
  • 对于 100%100% 的测试数据,−231≤��≤��<231−231≤xl​≤xu​<231,−231≤��≤��<231−231≤yl​≤yu​<231。
  • 思路:没有,转化成longlong
  • 代码:
    #include<bits/stdc++.h>
    using namespace std;
    
    int main()
    {
        long long x1, x2, y1, y2;
        cin >> x1 >> x2 >> y1 >> y2; 
        if (x2 * y2 > 2147483647 || x1 * y1 > 2147483647 ||x1 * y2 < -2147483648 ||x2 * y1 < -2147483648)
        //最大值大于int,最小值大于int,如果x1为-,则x1*y2为负数最大值小于int,x2同理
            cout << "long long int";
        else
            cout << "int";
        return 0;
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值