编程语言
首页 > 编程语言> > PAT-算法笔记 | 入门篇-入门模拟-简单模拟-A1065

PAT-算法笔记 | 入门篇-入门模拟-简单模拟-A1065

作者:互联网

【Notes】WA

题目描述

在这里插入图片描述

Sample Input

3
1 2 3
2 3 4
9223372036854775807 -9223372036854775808 0

Sample Output

Case #1: false
Case #2: true
Case #3: false

问题代码

【Notes】想得也太简单了= - =

#include<cstdio>

int main()
{
	long long int a,b,c;
	int n; scanf("%d",&n);
	for(int i=0;i<n;i++)
	{
		scanf("%lld%lld%lld",&a,&b,&c);
		if((a+b)>c) printf("Case #%d: true\n",i+1);
		else  printf("Case #%d: false\n",i+1);
	} 
	return 0;
}

修改思路

【情况分析】

  1. A+B263A+B\ge2^{63}A+B≥263显然A+B>CA+B>CA+B>C成立;但会发生正溢出,由题目条件,A+BA+BA+B最大为26422^{64}-2264−2因此使用long long溢出后值的区间为[263,2][-2^{63},-2][−263,−2]
    (由(2642)%(264)=2(2^{64}-2)\%(2^{64})=-2(264−2)%(264)=−2计算得出)。# 涉及计组吗
  2. A+B<263A+B<-2^{63}A+B<−263显然A+B<CA+B<CA+B<C成立;但会发生负溢出。同上,负溢出后值的区间为[0,263)[0,2^{63})[0,263)(由(264)%(264)=0(-2^{64})\%(2^{64})=0(−264)%(264)=0计算得出)
  3. 无溢出的情况正常比较即可。
#include<cstdio>

int main()
{
	int T, tcase=1;
	scanf("%d",&T);
	while(T--)
	{
		long long a,b,c;
		scanf("%lld%lld%lld",&a,&b,&c);
		long long res = a+b;
		bool flag;
		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) printf("Case #%d: true\n",tcase++);
	    else printf("Case #%d: false\n",tcase++);
	}
	return 0;
}
亦吱 发布了6 篇原创文章 · 获赞 0 · 访问量 174 私信 关注

标签:Case,PAT,int,long,263,入门篇,264,false,模拟
来源: https://blog.csdn.net/qq_43450740/article/details/104206745