__int128的相关操作

传送门:点击打开链接

题意:四个数相加。

分析:可以用java大数来做,也可以使用_int128来做,或者用unsigned long long (最大为2^64-1)对四个数都为2^62特判一下就好了。写这篇博客主要了解_int128的用法。

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

代码:(g++)

#include<bits/stdc++.h>  
using namespace std;  
typedef unsigned long long ll;  
void print(__int128 x)  
{  
    if(!x)  
    {  
        puts("0");  
        return ;  
    }  
    string ret="";  
    while(x)  
    {  
        ret+=x%10+'0';  
        x/=10;  
    }  
    reverse(ret.begin(),ret.end());  
    cout<<ret<<endl;  
}  
void solve()  
{  
    ll a,b,c,d;  
    __int128 ans=0;  
    scanf("%lld%lld%lld%lld",&a,&b,&c,&d);  
    ans+=a;ans+=b;ans+=c;ans+=d;  
    print(ans);  
}  
  
int main()  
{  
    //freopen("in.txt","r",stdin);  
    //freopen("out.txt","w",stdout);  
    int T;  
    scanf("%d",&T);  
    while(T--)  
    {  
        solve();  
    }  
    return 0;  
}  

 

写个了__int128版本的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;
}

 

  • 12
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值