题目链接:https://pintia.cn/problem-sets/994805342720868352/problems/994805406352654336
思路:
cin和scanf输入的区别:cin输入一个溢出的数值时读入到变量内的是变量所能存储的最大值,而scanf则会将溢出后变量大小位置所能存储的数值
本题利用溢出来判断A+B与C的关系
long long 存储范围为[-263,263)
先讨论 A,B!=263情况
如果A>0,B>0出现溢出,A+B范围为[263,264-2],溢出后long long 范围所能存储的数值为[263,264-2]%264=[-263,-2]
如果A<0,B<0出现溢出,A+B范围为[-264,-263),溢出后long long 范围所能存储数值为[-264,-263)%264=(-263,0];
编码后通过所有测试数据,证明没有出现263情况
当然对于Java 和python 情况,代码如下
代码:
c++
#include<bits/stdc++.h>
using namespace std;
int main (){
long long a,b,c,ans;
int n;
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%lld %lld %lld",&a,&b,&c);
ans=a+b;
bool f;
if(ans < 0 && a > 0 && b > 0)f=true;
else if(ans >=0 && a<0 && b<0 )f=false;//
else if(ans>c)f=true;
else f=false;
if(f)
printf("Case #%d: true\n",i);
else
printf("Case #%d: false\n",i);
}
}
java
import java.util.*;
import java.math.*;
import java.io.*;
public class Main{
public static void main(String[] args){
Scanner scin=new Scanner(new BufferedInputStream(System.in));
int n=scin.nextInt();
for(int i=1;i<=n;i++){
String sa=scin.next();
String sb=scin.next();
String sc=scin.next();
BigInteger numa=new BigInteger(sa);
BigInteger numb = new BigInteger(sb);
BigInteger numc = new BigInteger(sc);
BigInteger num=numa.add(numb);
// System.out.printf("1");
if(num.compareTo(numc)==1)System.out.printf("Case #%d: true\n",i);
else System.out.printf("Case #%d: false\n",i);
// System.out.println(numa);
}
}
}
python
n=int(input())
for i in range(n):
ans,bns,cns=input().split(" ")//通过空格隔开的连续三组输入
a,b,c=int(ans),int(bns),int(cns)
res="Case #"+str(i+1)+": "
if a+b>c:
res+="true";
else:
res+="false";
print(res)