PAT 1065 A+B and C (64bit)

这一题很浅显,就是让求A+B>C,如果符合条件则输出true,反之输出false

按道理说直接模拟即可,但是因为C的范围很大,在-2^63, 到 2^36之间,A和B同样会很大,那么就可能出现A+B溢出,即超出数据类型的范围。

因此我们要考虑溢出的情况:

cpp 复制代码
        else if(A>0&&B>0&&A+B<=0)
		{
		    cout<<"Case #"<<i+1<<": ";
    		cout<<"true"<<endl;
		}
		else if(A<0&&B<0&&A+B>=0) 
		{
			cout<<"Case #"<<i+1<<": ";
    		cout<<"false"<<endl;
		}

存在这两种溢出的情况。

那么就可以得出完整代码:

cpp 复制代码
#include <iostream>
#include <limits.h>
#include <cstring>
#include <queue>
#include <unordered_map>
#include <algorithm>
#include <cmath>
#include <vector>
#include <map>
#include <set>
using namespace std;
 long long A;
  long long B;
  long long C; 
int main()
{
	ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
    int T;
    cin>>T;
    for(int i=0;i<T;i++)
    {
    	cin>>A>>B>>C;
    	
        long long sum=A+B;
		 if(A>0&&B>0&&sum<0)
		{
		    cout<<"Case #"<<i+1<<": ";
    		cout<<"true"<<endl;
		}
		else if(A<0&&B<0&&sum>=0) 
		{
			cout<<"Case #"<<i+1<<": ";
    		cout<<"false"<<endl;
		}
        else if(sum>C)
        {
             cout<<"Case #"<<i+1<<": ";
    		cout<<"true"<<endl;
        }
		else
		{
				cout<<"Case #"<<i+1<<": ";
    		    cout<<"false"<<endl;
		}
	}
	return 0;
 } 

这里需要注意一定要先判断溢出,在比较的时候应该先让A+B的值放到一个变量里面,而不是直接:

cpp 复制代码
A+B<=0
A+B>=0

因为在cpp中会先把B移到右边,再比较,而不是先加减再比较。

因此我们应该用sum=A+B。

相关推荐
qeen872 小时前
【数据结构】自平衡二叉搜索树各种旋转算法原理解析及AVL树的C++实现
数据结构·c++·算法
lucas_AI3 小时前
1.2B 小模型赢过 235B 大模型:NaviDC-OCR 把文档解析卷明白了
人工智能·深度学习·算法
冻柠檬飞冰走茶3 小时前
PTA基础编程题目集 7-35有理数均值(C++语言实现)
开发语言·数据结构·c++·算法·均值算法
民乐团扒谱机4 小时前
【微实验】倒谱算法(Cepstrum)深度解析:原理、数学推导与代码实现
人工智能·算法·语音识别
Nil2085 小时前
leetcode 189轮转数组
数据结构·算法·leetcode
-dzk-5 小时前
【动态规划】LC 118.杨辉三角
算法·动态规划
恣逍信点5 小时前
《凌微经》静态自悖——变化之自因
人工智能·科技·算法·机器学习·业界资讯·拓扑学·哲学
吃着火锅x唱着歌5 小时前
LeetCode 3885.设计事件管理器
算法·leetcode·职场和发展
土司大王6 小时前
LeetCode hto100——字母异位词分组
java·算法·leetcode
Eloudy6 小时前
预词力:LLM 的唯一形式化能力
人工智能·算法·agent