大数的溢出,正溢出和负溢出

正溢出:两个整数相加的结果超过了数据类型所能表示的最大范围,结果为负数

负溢出:两个负数相加的结果超过了数据类型所能表示的最小范围,结果为正数(包括0)

PAT 1065 https://pintia.cn/problem-sets/994805342720868352/problems/994805406352654336

看到这道题的第一反应是大数字符串,但是想了想好像会很麻烦

后来才了解到可以用大数的溢出来处理

且审题 c的范围是可以用long long的

#include<bits/stdc++.h>
using namespace std;
int main()
{
	int t;
	cin>>t;
	int i;
	for(i=1;i<=t;i++)
	{
		//不用string大数运算,string a,b;
		long long a,b,c;//审题 c在long long 范围内 
		cin>>a>>b>>c;
		long long ans;
		bool flag=true;
		ans=a+b;
		if(a>0&&b>0&&ans<=0)
		flag=true;
		else if(a<0&&b<0&&ans>=0)
		flag=false;
		else
		{
			if(ans<=c)
			flag=false;
		}
		//if(a[0]=='-')
		printf("Case #%d: ",i); 
		if(flag)
		cout<<"true"<<endl;
		else
		cout<<"false"<<endl;
	}
	return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_40916491/article/details/85257897