PAT A1065 A+B and C (64bit)

桃扇骨 2021-10-01 05:54 311阅读 0赞

Given three integers A, B and C in [−2的63次方​​ ,2的63次方​​ ], 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

接下来时AC代码:

  1. #include <stdio.h>
  2. #include <stdbool.h>
  3. int main(int argc, char *argv[]) {
  4. int T,count=1;
  5. long long a,b,c;
  6. long long result;
  7. bool flag;
  8. scanf("%d",&T);
  9. while(T--){
  10. scanf("%lld%lld%lld",&a,&b,&c);
  11. result=a+b;
  12. if(a>0&&b>0&&result<0){
  13. flag=true; //正溢出为true
  14. }else if(a<0&&b<0&&result>=0){
  15. flag=false; //负溢出为false
  16. }else if(result>c){
  17. flag=true; //无溢出时,正常比较
  18. }else{
  19. flag=false; //无溢出时,正常比较
  20. }
  21. if(flag==true){
  22. printf("Case #%d: true\n",count++);
  23. }else{
  24. printf("Case #%d: false\n",count++);
  25. }
  26. }
  27. return 0;
  28. }

注意:
1.这个题目的主要意图是让我们考虑溢出
2.计算机组成原理中指出,两个正数之和等于复数或者两个负数之和等于正数,就是溢出
3.a>0,b>0,a+b<0的时候为正溢出,结果为true 4.a<0,b<0,a+b>=0的时候为负溢出,结果为false
5.没有发生溢出时正常结算
6.a+b必须放到longlong类型变量中才可以和c进行比较,直接用a+b和c比较会造成数据错误

发表评论

表情:
评论列表 (有 0 条评论,311人围观)

还没有评论,来说两句吧...

相关阅读

    相关 PAT~乙级~1065 单身狗 ~python

    目描述: “单身狗”是中文对于单身人士的一种爱称。本题请你从上万人的大型派对中找出落单的客人,以便给予特殊关爱。 输入格式: 输入第一行给出一个正整数 N(≤ ...