__int128的I/O操作

_int128 类型的数据是大整数类型,貌似只可以在Linux操作系统环境下的gcc编译器才可以使用,但是C99标准未提供__int128的I/O操作的具体操作,需要我们自己去实现。下面是找的IO模板,若使用printf("%lld\n", (__int128)a);这种操作虽然可以输出东西但是你会在编译中得到如下警告

warning: format ‘%lld’ expects argument of type ‘long long int*’, but argument 2 has type ‘__int128*’ [-Wformat=] 
#include 
using namespace std;
inline __int128 read(){
    __int128 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;
}

inline void print(__int128 x){
    if(x<0){
        putchar('-');
        x=-x;
    }
    if(x>9)
        print(x/10);
    putchar(x%10+'0');
}

int main(void){
    __int128 a = read();
    __int128 b = read();
    print(a + b);
    cout<<endl;
    return 0;
}

你可能感兴趣的:(模板,数学学习)