题目
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:
|
|
Sample Output:
|
|
代码
|
|
思路
溢出只有两正数相加为负和两负数相加为正时发生。
注意两个负数相加溢出结果可能为0,《算法笔记》:
- 当A+B>=263时,显然有A+B>C,A+B会因超过long long的正向最大值而发生正溢出,由于题目给定的A和B最大均为263-1,故A+B最大为264-2,因此long long存储正溢出后的值的区间为[-263, -2],由(264-2)%(264)=-2可得右边界,所以当A>0 && B>0 && A+B<0 时,输出true。
- 当A+B<-263时,显然有A+B<C成立,但是A+B会因超过long long 的负向最小值而发生负溢出。由于题目给定的A和B的最小值为-263,故A+B最小为-264,因此使用long long 存储负溢出后的值的区间为[0, 263)。所以当 A<0 && B<0 &&="" a+b="">=0时为负溢出,输出false。
还有一个问题
1
a + b >= 0 ;
的写法不对,要存在另一个变量里才能比较,下面的写法才是对的,
1 2
ans = a + b ; ans >= 0 ;
update:和编译器有关,第一种写法G++过不了,换CLANG++成功。
codeblock在debug中遇到进程无法退出可以用
taskkill /im 进程名称 /F
TODO
[ ]
[牛客题解]: www.nowcoder.com/questionTerminal/3502cc5a5d80402f93823fd90f21325d
[ ] Java使用BigDecimal进行高精度计算