You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
|
|
## 关于$\_\_int128$的使用
|
|
|
|
|
|
|
|
|
|
正常来说,`unsigned long long`已经是可以定义的最大的类型了,但是如果数据范围超过了$2^64$就会爆炸。如果要处理比其大一点又不是那么大的数,就可以使用`__int128`这个定义。
|
|
|
|
|
|
|
|
|
|
$NOI$及$CSP$系列中可以正常使用`__int128`:
|
|
|
|
|
https://www.cnblogs.com/littlehb/p/15935662.html
|
|
|
|
|
|
|
|
|
|
$\_\_int128$ 就是占用$128$字节的整数存储类型。由于是二进制,范围就是 $(-2^{127}) \sim (2^{127}-1)$,
|
|
|
|
|
如果使用了 `unsigned __int128`,则范围变成 $(0) ~ (2^{128})$,即约$39$位数!
|
|
|
|
|
|
|
|
|
|
由于 `__int128` 仅仅是 $(GCC)$ 编译器内的东西,不在 $(C++ 98/03/11/14/17/20)$ 标准内,且仅 $(GCC4.6)$ 以上$64$位版本支持,很多配套都没有,只有四则运算功能, 所以要自己写输入输出。使用方法与 $int$ $long$ $long$无异
|
|
|
|
|
|
|
|
|
|
<font color='red'><b>注意:如何确定考试中能不能用$int128$呢?办法就是先创建一个空白的$cpp$文件,然后使用 `__int128 a;`,测试一下,编译器不报错就是可以。</b></font>
|
|
|
|
|
|
|
|
|
|
``` c++
|
|
|
|
|
#include <bits/stdc++.h>
|
|
|
|
|
|
|
|
|
|
using namespace std;
|
|
|
|
|
|
|
|
|
|
typedef unsigned __int128 LLL;
|
|
|
|
|
|
|
|
|
|
LLL read() {
|
|
|
|
|
LLL x = 0, f = 1;
|
|
|
|
|
char ch = getchar();
|
|
|
|
|
while (ch < '0' || ch > '9') {
|
|
|
|
|
if (ch == '-') f = -1;
|
|
|
|
|
ch = getchar();
|
|
|
|
|
}
|
|
|
|
|
while (ch >= '0' && ch <= '9') {
|
|
|
|
|
x = x * 10 + ch - '0';
|
|
|
|
|
ch = getchar();
|
|
|
|
|
}
|
|
|
|
|
return x * f;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void out(LLL x) {
|
|
|
|
|
if (x < 0) putchar('-'), x = -x;
|
|
|
|
|
if (x > 9) out(x / 10);
|
|
|
|
|
putchar(x % 10 + '0');
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int main() {
|
|
|
|
|
LLL a, b;
|
|
|
|
|
a = read(), b = read();
|
|
|
|
|
out(a + b);
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
```
|