「PAT乙级真题解析」Basic Level 1011 (问题分析+完整步骤+伪代码描述+提交通过代码)

乙级的题目训练主要用来熟悉编程语言的语法和形成良好的编码习惯和编码规范。从小白开始逐步掌握用编程解决问题。

PAT乙级BasicLevelPractice 1011

问题分析

题目给定3个整数A, B, C, 三个数取值范围都是 [−2^31, 2^31]. 要求判断A+B是否大于C.

32位机器能表示的长度是32位, 整数有正有负, 1位给符号位, 31位给数值.
所以取值范围中的"2^31"意味着本题需要重点考虑整型的表示范围, 防止"数值溢出".

为了避免数值溢出, 我们需要先分析哪些情况会数值溢出。

数值溢出的情况

A, B, C三个数本身不会数值溢出, 但是由于我们需要计算A+B, 所以要考虑的是A+B可能数值溢出的情况.
A+B数值溢出的情况有:

  1. 大正数+大正数导致结果过大溢出; (A>0, B>0)
  2. 大负数+大负数导致结果过小溢出; (A<0, B<0)

其他情况可以直接比较A+B和C的大小。

避免数值溢出

以A>0, B>0的情况为例, 我们需要做的是避免"A+B"的运算, 同时达到比较(A+B)和C的目的.

  1. 如果C是负数, 则由正负性可以直接知道: A+B > C
  2. 如果C是正数, 则 (A+B)与C的比较可以转换为 B与(C-A)的比较.
  • 8
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

明仔的阳光午后

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值