转载自博客
这种类型只有部分GCC编译器支持。经测试,正常运算与普通int无异,但是输入输出时无论是cin,cout还是printf都会报错,所以必须自己写输入输出函数。
定义时与别的数据类型并没有什么区别
eg: __int128 a,b,c;
输入暂时采用字符串读入方式。
方法一:重载输出
std::ostream& operator<<(std::ostream& os, __int128 T) {
if (T<0) os<<"-";if (T>=10 ) os<<T/10;if (T<=-10) os<<(-(T/10));
return os<<( (int) (T%10) >0 ? (int) (T%10) : -(int) (T%10) ) ;
}
方法二:变为字符串式输入输出
输入
void scan(__int128 &x)//输入
{
x = 0;
int f = 1;
char ch;
if((ch = getchar()) == '-') f = -f;
else x = x*10 + ch-'0';
while((ch = getchar()) >= '0' && ch <= '9')
x = x*10 + ch-'0';
x *= f;
}
输出:
void print(__int128 x)
{
if(x < 0)
{
x = -x;
putchar(‘-‘);
}
if(x > 9) print(x/10);
putchar(x%10 + ‘0‘);
}
int__128版本的a+b,代码如下
#include <bits/stdc++.h>
using namespace std;
void scan(__int128 &x)//输入
{
x = 0;
int f = 1;
char ch;
if((ch = getchar()) == '-') f = -f;
else x = x*10 + ch-'0';
while((ch = getchar()) >= '0' && ch <= '9')
x = x*10 + ch-'0';
x *= f;
}
void _print(__int128 x)
{
if(x > 9) _print(x/10);
putchar(x%10 + '0');
}
void print(__int128 x)//输出
{
if(x < 0)
{
x = -x;
putchar('-');
}
_print(x);
}
int main()
{
__int128 a, b;
scan(a); scan(b);
print(a + b);
return 0;
}