【PAT (Advanced Level)】1065. A+B and C (64bit) (20)

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

时间限制
100 ms
内存限制
32000 kB
代码长度限制
16000 B
判题程序
Standard
作者
HOU, Qiming

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溢出情况的比较;若a、b异号,一定不会溢出,可以直接相加比较。若溢出且同为正,则a + b一定比c大,溢出且同为负,则a + b一定比c小。所以主要问题就是判断什么时候溢出:相加变号(为零)则溢出。

/************************************
This is a test program for anything
Enjoy IT!
************************************/

#include <iostream>
#include <iomanip>
#include <algorithm>
#include <vector>
#include <list>
#include <set>
#include <fstream>
#include <string>
#include <cmath>
using namespace std;

int main()
{
	/*ifstream cin;
	cin.open("in.txt");
	ofstream cout;
	cout.open("out.txt");*/
	//
	// TO DO Whatever You WANT!
	int T;
	cin >> T;
	int count = 0;
	while (T--)
	{
		long long int a, b, c, temp;
		cin >> a >> b >> c; // 输入a, b, c
		temp = a + b;
		a + b < c;
		if (a > 0 && b > 0)	// 正数
		{
			//
			if (a + b <= 0) // 溢出
			{
				cout << "Case #" << ++count << ": " << "true" << endl;
			}
			else
			{
				if (a + b > c)	// 输出
				{
					cout << "Case #" << ++count << ": " << "true" << endl;
				}
				else
				{
					cout << "Case #" << ++count << ": " << "false" << endl;
				}
			}
		}
		else if (a < 0 && b < 0)  // 负数
		{
			//
			if (a + b >= 0) // 溢出
			{
				cout << "Case #" << ++count << ": " << "false" << endl;
			}
			else
			{
				if (a + b > c)	// 输出
				{
					cout << "Case #" << ++count << ": " << "true" << endl;
				}
				else
				{
					cout << "Case #" << ++count << ": " << "false" << endl;
				}
			}
		}
		else // 异号可以相加
		{
			if (temp > c)	/**这里非常奇怪,写temp > c可以通过AC,写a + b > c就有两个答案错误**/
			{
				cout << "Case #" << ++count << ": " << "true" << endl;
			}
			else
			{
				cout << "Case #" << ++count << ": " << "false" << endl;
			}
		}
}
//
// system("pause");
return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值