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;
}
修改思路
- long long 的范围是[−263,263) 因此题目中的数字相加会导致溢出;
- 正数之和成负数,负数之和成整数则为溢出;
- 只需与0比较即可。
【情况分析】
- A+B≥263显然A+B>C成立;但会发生正溢出,由题目条件,A+B最大为264−2因此使用long long溢出后值的区间为[−263,−2]
(由(264−2)%(264)=−2计算得出)。# 涉及计组吗 - A+B<−263显然A+B<C成立;但会发生负溢出。同上,负溢出后值的区间为[0,263)(由(−264)%(264)=0计算得出)
- 无溢出的情况正常比较即可。
#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