我写的时候其实有测试点没同过,参考别人的,呜呜。
这里重要的是long long数据类型范围,这里我在网上搜索了下其他的各种类型的范围:
int 、long 、long long数据类型范围
unsigned int 0~4294967295
int 2147483648~2147483647
unsigned long 0~4294967295
long 2147483648~2147483647
long long的最大值:9223372036854775807
long long的最小值:-9223372036854775808
unsigned long long的最大值:18446744073709551615
__int64的最大值:9223372036854775807
__int64的最小值:-9223372036854775808
unsigned __int64的最大值:18446744073709551615
#include<iostream>
#include<climits>
using namespace std;
bool cmp(const long long &a,const long long &b,const long long &c)
{
if(a>0&&b>0)
{
if(a>LLONG_MAX-b)return true;
}
if(a<0&&b<0)
{
if(a<LLONG_MIN-b)return false;//好奇怪,为什么这里不能写成a+b>LLONG_MIN.仔细想想 a+b的范围可能无法表示,
} //所以要写成这样
return a+b>c;
}
int main()
{
long long a,b,c;
int t;
int count=1;
cin>>t;
while(t--)
{
cin>>a>>b>>c;
cout<<"Case #"<<count<<": ";
if(cmp(a,b,c))cout<<"true"<<endl;
else cout<<"false"<<endl;
count++;
}
system("pause");
return 0;
}
这里用到了头文件climits ,其中定义了类型的数值的最大值和最小值
通过这里需要了解一下__
在C/C++中,64为整型一直是一种没有确定规范的数据类型。现今主流的编译器中,对64为整型的支持也是标准不一,形态各异。一般来说,64位整型的定义方式有long long和__int64两种(VC还支持_int64),而输出到标准输出方式有printf(“%lld”,a),printf(“%I64d”,a),和cout << a三种方式。