zoukankan      html  css  js  c++  java
  • PAT A1065 A+B and C (64bit) (20分)

    看似简单但是,需要考虑溢出的情况,有正溢出和负溢出。

    因为A,B,C的范围为[-263,263],而long long的取值范围为[-263,263],所以相加会存在溢出的问题 注意A+B必须存放到longlong型变量后才能与C比较,否则会造成数据计算的错误

    1,当A+B>=2^63时,显然A+B>C成立,但是A+B会超过long long的最大值,发生溢出,而A、B的最大值为263-1,所以A+B的最大值为264-2,所以使用long long存储后后溢出的值的区间为[-263,-2],【-2=(264-2)%2^64】

    2,当A+B<-2^63时,显然A+B<C成立,但是A+B会超过long long的最大值,发生溢出,而A、B的最小值为-263,所以A+B的最小值为-264,所以使用long long存储后溢出的值的区间为[0,263),【0=(-264)】%2^64】
    注意这个零,第三个测试点卡这个地方。

    #include<cstdio>
    using namespace std;
    int main(){
        long long A,B,C;
        int n;
        scanf("%d",&n);
        bool flag;
        for(int i = 1;i<=n;i++){
            scanf("%lld %lld %lld",&A,&B,&C);
            long long res = A+B;
            if(A>0&&B>0&&res<0) flag = true;
            else if(A<0&&B<0&&res>=0) flag = false;
            else if(res>C) flag = true;
            else flag = false;
            if(flag==true){
                printf("Case #%d: true
    ",i);
            }else{
                printf("Case #%d: false
    ",i);
            }
        }
        return 0;
    }
    
  • 相关阅读:
    【转载】阿里云轻量应用型服务器和ECS服务器比较
    Android -- 启动模式
    Android -- Broadcast接收
    Qt正则表达式提取数据
    Android -- Intent
    Android -- 多线程下载
    Android -- ContentProvider与联系人
    Android -- 内容观察者
    Android -- ContentProvider
    Android -- ListView与ArrayAdapter、SimpleAdapter
  • 原文地址:https://www.cnblogs.com/shuibeng/p/13599553.html
Copyright © 2011-2022 走看看