__int128使用

这种大整数类型编译器的gcc是不支持的,比如在codeblocks 16.01/Dev C++是无法编译的,但是提交到大部分OJ上是可以编译且能用的。C/C++标准。IO是不认识__int128这种数据类型的,自己实现输入和输出,其他的运算,与int没有什么不同。

J.5.6 Other arithmetic types
Additional arithmetic types, such as __int128 or double double, and their
appropriate conversions are defined (6.2.5, 6.3.1). Additional floating types may have
more range or precision than long double, may be used for evaluating expressions of
other floating types, and may be used to define float_t or double_t.


意思是这个类型能不能用完全取决于编译器,在大部分oj是都是可以使用的

#include <bits/stdc++.h>
using namespace std;
#define ll long long
const ll MOD = 1e9 + 7;
void print(__int128 x)
{
    if(x < 0)
    {
        x = -x;
        putchar('-');
    }
    if(x > 9) _print(x/10);
    putchar(x%10 + '0');
}
int main()
{
    ll a, b;
    cin>>a>>b;
    __int128 x=a*b;
    print(x);
    return 0;
}

再来一个输入输出代码

#include <bits/stdc++.h>
using namespace std;
#define ll long long
const ll MOD = 1e9 + 7;
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 main()
{
    __int128 a, b;
    scan(a); 
    scan(b);
    print(a*b);
    return 0;
}

来个例题试一下
大整数运算

发布了36 篇原创文章 · 获赞 10 · 访问量 1929

猜你喜欢

转载自blog.csdn.net/weixin_44003265/article/details/96570279
128