字节跳动面试题. int64 a b c 判断 a+b>c(考虑溢出问题)

1.题目描述

 int64 a b c 判断 a+b>c(考虑溢出问题)

2.解题思路

1.什么情况发生溢出?

两个正数相加;两个负数相加;(同号相加)
正数减负数;负数减正数;(异号相减)

2.分情况讨论

1)a,b异号(包括=0):a+b>c不会溢出,直接判断即可

2)a,b同号,c与a,b同号:转化为判断a>c-b,因为同号相减不会溢出

3)a,b同号,c与a,b异号:

负+负>正:return False

正+正>负:return True

3.代码实现

public static boolean compareMaxMin(int A,int B,int C)
	{
		//问题难点在于输入是一个属于int类型范围的整数
		//但是两个整数相加可能会导致溢出的情况
		//需要解决溢出问题  同号相加 异号相减
		if((A>0&&B>0)||(A<0&&B<0))//A、B同号
		{
			//C和AB同号
			if((A>0&&C>=0)||(A<0&&C<=0))
			{
				if(A>C-B)
					return true;
				else
					return false;
			}
			//C和AB异号
			else {
				if(A>0)
					return true;
				else
					return false;
			}
		}
		else  //A、B异号 或者存在A或B=0 0不会造成溢出
		{
			//直接比较
			if(A+B>C)
				return true;
			else {
				return false;
			}
		}
	}
————————————————
版权声明:本文为CSDN博主「枯树下的幻想」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_43823363/article/details/86615699

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值