A1065. A+B and C (64bit) (20)

本文介绍了一种在可能的数据溢出情况下,判断三个64位整数A、B和C中,A与B之和是否大于C的方法。通过判断符号来避免直接计算导致的溢出问题。

Given three integers A, B and C in [-263, 263], you are supposed to tell whether A+B > C.

Input Specification:

The first line of the input gives the positive number of test cases, T (<=10). Then T test cases follow, each consists of a single line containing three integers A, B and C, separated by single spaces.

Output Specification:

For each test case, output in one line "Case #X: true" if A+B>C, or "Case #X: false" otherwise, where X is the case number (starting from 1).

Sample Input:
3
1 2 3
2 3 4
9223372036854775807 -9223372036854775808 0
Sample Output:
Case #1: false
Case #2: true
Case #3: false

题目大意:

给出A、B、C三个数,取值范围为[-2^63, 2^63]  判断AB的和是否比C大。

AB相加可能会超出longlong的取值范围[-2^63, 2^63-1],需要考虑数据越界。  A>0,B>0,越界时 AB和取值范围为[-2^63, -2]。

 (两个2^63-1相加为-2)。

A<0,B<0,越界时AB和的取值范围为[0,2^63]。    先考虑数据是否越界之后,再判断不越界的情况。

代码如下:

#include <cstdio>

int main()
{
	int T;
	long long A, B, C;
	long long res;
	bool flag;                    //引入变量flag 去判断A+B是否大于C;
	
	scanf ("%d", &T);
	for (int i = 1; i <= T; i++)
	{
		scanf ("%lld%lld%lld", &A, &B, &C);
		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)                    //根据flag的值进行输出;
		    printf ("Case #%d: true\n", i);
		else
	        printf ("Case #%d: false\n", i);		
	}
	
	return 0; 
} 



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值