zoukankan      html  css  js  c++  java
  • zju pat1065. A+B and C (64bit)

    long long 输入
    #include <iostream>
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <string>
    #include <vector>
    #include <algorithm>
    #include <map>
    using namespace std;
    int main()
    {
        int i,n;
        long long a,b,c,temp;
        bool flag;
        while(scanf("%d",&n)!=EOF)
        {
            for(i =0 ; i< n;i++)
            {
                scanf("%lld%lld%lld",&a,&b,&c);
                temp = a + b;                   //只有两数同号相加才有可能溢出
                if(a > 0 && b > 0 && temp <= 0)  //正数溢出,则必然大于单个数
                    flag = true;
                else if(a < 0 && b < 0 && temp >= 0) //负数溢出,则必然小于单个数
                    flag = false;
                else
                    flag = (bool)(temp > c);
                if(flag)
                    printf("Case #%d: true
    ",i+1);
                else
                    printf("Case #%d: false
    ",i+1);
            }
        }
        return 0;
    }

    在C/C++中,64为整型一直是一种没有确定规范的数据类型。现今主流的编译器中,对64为整型的支持也是标准不一,形态各异。一般来说,64位整型的定义方式有long long和__int64两种(VC还支持_int64),而输出到标准输出方式有printf(“%lld”,a),printf(“%I64d”,a),和cout << a三种方式。

    本文讨论的是五种常用的C/C++编译器对64位整型的支持,这五种编译器分别是gcc(mingw32),g++(mingw32),gcc(linux i386),g++(linux i386),Microsoft Visual C++ 6.0。可惜的是,没有一种定义和输出方式组合,同时兼容这五种编译器。为彻底弄清不同编译器对64位整型,我写了程序对它们进行了评测,结果如下表。

    变量定义
    输出方式
    gcc(mingw32)
    g++(mingw32)
    gcc(linux i386)
    g++(linux i386)
    MicrosoftVisual C++ 6.0

    long long
    “%lld”
    错误
    错误
    正确
    正确
    无法编译

    long long
    “%I64d”
    正确
    正确
    错误
    错误
    无法编译

    __int64
    “lld”
    错误
    错误
    无法编译
    无法编译
    错误

    __int64
    “%I64d”
    正确
    正确
    无法编译
    无法编译
    正确

    long long
    cout
    非C++
    正确
    非C++
    正确
    无法编译

    __int64
    cout
    非C++
    正确
    非C++
    无法编译
    无法编译

    long long
    printint64()
    正确
    正确
    正确
    正确
    无法编译

    上表中,正确指编译通过,运行完全正确;错误指编译虽然通过,但运行结果有误;无法编译指编译器根本不能编译完成。观察上表,我们可以发现以下几点:

    1. long long定义方式可以用于gcc/g++,不受平台限制,但不能用于VC6.0。
    2. __int64是Win32平台编译器64位长整型的定义方式,不能用于Linux。
    3. “%lld”用于Linux i386平台编译器,”%I64d”用于Win32平台编译器。
    4. cout只能用于C++编译,在VC6.0中,cout不支持64位长整型。
  • 相关阅读:
    汉诺塔问题_栈模拟递归
    汉诺塔问题_栈模拟递归
    Dockerfile指令
    Dockerfile指令
    C++全排列组合算法
    剑指offer——复杂链表复制
    数据库中的索引实现原理
    TCP三次握手四次挥手详解
    TCP协议原理
    OSI七层模型
  • 原文地址:https://www.cnblogs.com/cheng07045406/p/3536401.html
Copyright © 2011-2022 走看看