PAT 1065 A+B and C[大数运算][溢出]
1065 A+B and C (64bit)(20 分)
Given three integers A, B and C in [−263,263], you are supposed to tell whether A+B>C.
Input Specification:
The first line of the input gives the positive number of test cases, T (≤10). Then T test cases follow, each consists of a single line containing three integers A, B and C, separated by single spaces.
Output Specification:
For each test case, output in one line Case #X: true if A+B>C, or Case #X: false otherwise, where X is the case number (starting from 1).
Sample Input:
3
1 2 3
2 3 4
9223372036854775807 -9223372036854775808 0
Sample Output:
Case #1: false
Case #2: true
Case #3: false
题目大意:给出三个数,判断前两个数的和是否>第三个数,数是非常大的,需要用字符串来处理的。
//这里需要认真学习大数加法与大数乘法的套路。
//看了题解之后,才发现根本不是,long long就是2^64!!!
//这个为溢出问题,
代码来自:https://www.liuchuo.net/archives/2023
#include <cstdio>
using namespace std;
int main() {
int n;
scanf("%d", &n);
for(int i = ; i < n; i++) {
long long a, b, c;
scanf("%lld %lld %lld", &a, &b, &c);
long long sum = a + b;
if(a > && b > && sum < ) {//此时产生溢出,A+B>C
printf("Case #%d: true\n", i + );
} else if(a < && b < && sum >= ){//产生溢出,说明64位表示不了这么小的数,
printf("Case #%d: false\n", i + );//那么一定是小于。
} else if(sum > c) {//其他为正常情况
printf("Case #%d: true\n", i + );
} else {
printf("Case #%d: false\n", i + );
}
}
return ;
}
//我发现我很不理解,这个表示范围的问题,所以学习了一下:https://blog.csdn.net/y12345678904/article/details/52854230#commentBox
对于int 来说,4个字节,32位,有一位是符号为,那么它表示的数的范围就是(-2^31,2^31-1)。
右边的很好理解,比如4位,除去一位符号位,最大正数能表示7,(2^3-1).
那么对于最小数呢?由于负数在计算机中是用补码(原码取反+1)来存的,
-1的原码:1000 0000 0000 0000 0000 0000 0000 0001;
-1的补码:1111 1111 1111 1111 1111 1111 1111 1111;
-2147483647(-2^31+1)原码:1111 1111 1111 1111 1111 1111 1111 1111;
-2147483647补码:1000 0000 0000 0000 0000 0000 0000 0001;
但是!零有二进制中+0和-0两种形式:
+0原码为:0000 0000 0000 0000 0000 0000 0000 0000;
-0原码为:1000 0000 0000 0000 0000 0000 0000 0000;
那么就将-0拿来作为了-2^31,所以就是这么来的!
-2147483648的补码表示为1000 0000 0000 0000 0000 0000 0000 0000,在32位没有原码。
注意,这个补码并不是真正的补码,真正的补码(原码也是这个)是1 1000 0000 0000 0000 0000 0000 0000 0000,溢出(已经多了一位1,!不是32位能表示的了!)。
溢出情况:https://blog.csdn.net/diffjd/article/details/72835698
比如1字节为例:
正数区间:0000 0001 ~ 0111 1111 (1~127)
负数区间:1000 0000 ~ 1111 1111(-1~-127)
并且规定将-0表示为-128,那么如果最大整数超过产生溢出怎么办?
写了一个:

对图中a的二进制:0111 1111 1111 1111,此时再加就会超出界限,1000 0000 0000 0000,此时就是溢出了,就变为了负数,
此时:-32768在计算机中的表示就是-0,也就是1000 0000 0000 0000,那么在此基础上再做++运算,在计算机中补码是直接进行加法运算的,
结果就是1000 0000 0000 0001(对应的原码是:1111 1111 1111 1111),对应的十进制就是-32767.
终于搞明白了!
如图中的最后一行三个数:
其中2表示-32767中有两个1,包括符号位1和最后一位1;
其中1表示-32768中有一个1,即符号为的1;
其中16表示-1中有16个1,全为1.

这个运行结果再一次的证明了,会变成整数,是直接进行补码运算的。
//终于搞明白了!
PAT 1065 A+B and C[大数运算][溢出]的更多相关文章
- 大数运算(python2)
偶然又遇到了一道大数题,据说python大数运算好屌,试了一发,果然方便-1 a = int( raw_input() ); //注意这里是按行读入的,即每行只读一个数 b = int( raw_in ...
- 收藏的一段关于java大数运算的代码
收藏的一段关于java大数运算的代码: package study_02.number; import java.math.BigDecimal; import java.math.BigIntege ...
- [PKU2389]Bull Math (大数运算)
Description Bulls are so much better at math than the cows. They can multiply huge integers together ...
- java 大数运算[转]
用JAVA 实现算术表达式(1234324234324 + 8938459043545)/5 + 343434343432.59845 因为JAVA语言中的long 定义的变量值的最大数受到限制,例如 ...
- A+B大数运算
基础加法大数运算: [https://vjudge.net/problem/HDU-1002] 题目: 输入两个长度不超过1000的整数求出sum. 思路: 由于数字很大不能直接加,用字符串形式输入, ...
- PAT 1065 1066 1067 1068
pat 1065 A+B and C 主要是注意一下加法溢出的情况,不要试图使用double,因为它的精度是15~16 ...
- HOJ 2148&POJ 2680(DP递推,加大数运算)
Computer Transformation Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 4561 Accepted: 17 ...
- 九度OJ 1051:数字阶梯求和 (大数运算)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:6718 解决:2280 题目描述: 给定a和n,计算a+aa+aaa+a...a(n个a)的和. 输入: 测试数据有多组,输入a,n(1&l ...
- 九度OJ 1119:Integer Inquiry(整数相加) (大数运算)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:679 解决:357 题目描述: One of the first users of BIT's new supercomputer was ...
随机推荐
- mysql的MyISAM 和 InnoDB 的区别?优化MYSQL数据库的方法?
MyISAM 和 InnoDB 的基本区别 1.InnoDB不支持FULLTEXT类型的索引. 2.InnoDB 中不保存表的具体行数,也就是说,执行select count(*) from tabl ...
- mysql数据库,什么是数据库的全备份?
需求描述: 今天要做mysql数据库的全备份,那么就要弄清楚一个概念,到底什么是数据库的全备份呢. 概念解释: 数据库的全备份,就是在一个给定的时间点,对于mysql服务器管理的所有的数据进行备份. ...
- day13<常见对象+>
常见对象(StringBuffer类的概述) 常见对象(StringBuffer类的构造方法) 常见对象(StringBuffer的添加功能) 常见对象(StringBuffer的删除功能) 常见对象 ...
- exp/imp与expdp/impdp区别
在平常备库和数据库迁移的时候,当遇到大的数据库的时候在用exp的时候往往是需要好几个小时,耗费大量时间.oracle10g以后可以用expdp来导出数据库花费的时间要远小于exp花费的时间,而且文件也 ...
- Swift 高级运算符
本文转载至 http://my.oschina.net/sunqichao/blog?disp=2&catalog=0&sort=time&p=2 除了基本操作符中所讲的运算符 ...
- XML 和 JSON 的使用场景
我们都知道 JSON 和 XML 设计的初衷里都包含一点是对人类友好, 所以两者在这方面属于竞争关系. 而在 UI 描述上, 我觉得 XML 是比 JSON 要优异很多. 我们先来看一组简单的数据排版 ...
- 【Select2】带搜索框的下拉框美化插件
1 引入js css 文件 <script src="js/jquery-1.11.1.min.js"></script> <script src= ...
- vux版本升级
一开始用的笨办法, 先卸载npm uninstall vux --save; 然后在安装npm install vux --save; 卸载的还是蛮快的,安装是在下班的时候,让电脑待机2个小时,第二 ...
- 《FPGA那些事儿》原创教程总结
经过我们黑金工程师多年的不断努力,黑金原创教程已经达到了14部,包括: 第一部:[黑金原创教程]NIOSII那些事儿 http://www.heijin.org/forum.php?mod=viewt ...
- 破谣言——iPhone砍价
微信朋友圈和QQ空间很多朋友在传一个iPhone砍价免费送的活动.好吧,砍页面下面的那邪恶广告,第一感觉就是假的.但我要给出证明,所以就有了下面的代码.[只需把UID换成自己的就行],当你砍到5分钱的 ...