1011 A+B 和 C (15分)
给定区间 [−231,231] 内的 3 个整数 A、B 和 C,请判断 A+B 是否大于 C。
输入格式:
输入第 1 行给出正整数 T (≤10),是测试用例的个数。随后给出 T 组测试用例,每组占一行,顺序给出 A、B 和 C。整数间以空格分隔。
输出格式:
对每组测试用例,在一行中输出 Case #X: true 如果 A+B>C,否则输出 Case #X: false,其中 X 是测试用例的编号(从 1 开始)。
输入样例:
4
1 2 3
2 3 4
2147483647 0 2147483646
0 -2147483648 -2147483647
输出样例:
Case #1: false
Case #2: true
Case #3: true
Case #4: false
思路:
看输入的区间可知,如果用int整型,会导致溢出。
说得好,我选择long long。
但是并不是说用了long long就万事大吉了,后面会看到一个题数据范围直接飙到的264量级。
你这是在为难我C++。
说得好,我选择Python.
统计数据:
题解 方法一:
#include <cstdio>
using namespace std;
#define LL long long
LL n,a,b,c;
int main(){
scanf("%ld",&n);
for(int i=0;i<n;i++){
scanf("%ld %ld %ld",&a,&b,&c);
printf("Case #%d: %s\n",i+1,a+b>c?"true":"false");
}
return 0;
}
题解 方法二:
#include <cstdio>
using namespace std;
int n,a,b,c,flg,summ;
int main(){
scanf("%d",&n);
for(int i=0;i<n;i++){
scanf("%d %d %d",&a,&b,&c);
summ = a+b;
if(a>0 && b>0 && summ<=0) flg=1;
else if(a<0 && b<0 && summ>=0) flg=0;
else flg = summ>c?1:0;
printf("Case #%d: %s\n",i+1,flg?"true":"false");
}
return 0;
}
用溢出打败溢出
这段代码只要把int换成long long就可以过甲级1065
题解 方法三:
因为Python的整型自带高精度运算,所以不用担心溢出的问题。
这段代码同样可以通过甲级1065
if __name__ == "__main__":
line = input().split(" ")
for i in range(int(line[0])):
ln2 = input().split(" ")
if(int(ln2[0])+int(ln2[1])>int(ln2[2])):
print('Case #{}: true'.format(i+1))
else:
print('Case #{}: false'.format(i+1))
人生太苦短版本
Java也是有高精度运算的库的。
题解 方法四:
JAVA代码
import java.util.Scanner;
import java.math.BigDecimal;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int T = sc.nextInt();
long[]a = new long[T];
long[]b = new long[T];
long[]c = new long[T];
for(int i=0 ;i<T ;i++){
a[i] = sc.nextLong();
b[i] = sc.nextLong();
c[i] = sc.nextLong();
}
for(int i=0 ;i<T ;i++){
if(c[i]-b[i]<a[i]){
System.out.printf("Case #%d: true\n", i+1);
}
else{
System.out.printf("Case #%d: false\n", i+1);
}
}
}
}
显然我不会写Java