小技巧—强制类型转换
小技巧—强制类型转换
谨以此篇,纪念CSP-S2020 T2T3挂了60pts的自己。
爆数据类型这件事,凡是学过OI的应该都有所耳闻。
那么什么时候会爆呢?总结一下。
首先,输出输入如果超过这个数据类型的最大容纳量,那就爆了。这是最显然的。可以通过给定的数据范围判断。
然后是隐晦一点的,中间过程爆。具体一些,就是中间涉及到的运算,比如乘法取模,你以为最后都模下去了,但还是爆了。
所以这里涉及到强制类型转换。
简单地说,即便你考虑到中间过程可能爆,你写的也的确是longlong或ulonglong,但是如果没有强制类型转换,你还是会爆。为什么呢?
比如(1<<64)。
这里的1是默认int,64是默认int,所以最后的答案无论多大,系统还是会默认用int来存。
这不就炸了?
所以这里要加强制类型转换,1让它变成ull,就不会炸了。
就是这样:
(1ull<<64)
即可。