前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >比long long 更大的__int128

比long long 更大的__int128

作者头像
fishhh
发布2022-08-31 12:48:21
1.3K0
发布2022-08-31 12:48:21
举报
文章被收录于专栏:OI算法学习笔记OI算法学习笔记

说明

__int128 仅64位 GCC , G++ 支持,且不在 C++ 标准中。如果是64位 GCC 可直接使用。

关于NOI系列活动中编程语言使用限制的补充说明中表明:

允许使用以下划线开头的库函数或宏,但具有明确禁止操作的库函数和宏除外。

所以__int128能在比赛中进行使用。

存储范围

__int128占用128Byte的空间,数据范围是 −2127∼2127−1-2^{127} \sim 2^{127}-1−2127∼2127−1 。

精确范围是 −170141183460469231731687303715884105728∼170141183460469231731687303715884105727-170141183460469231731687303715884105728 \sim 170141183460469231731687303715884105727−170141183460469231731687303715884105728∼170141183460469231731687303715884105727 量级在1×10381\times 10^{38}1×1038 左右。

使用方式

声明定义

与其他类型一致 类型名 变量名

代码语言:javascript
复制
__int128 a=4,b=3;
a=10;
a+=b;
a*=b;
...

输入输出

由于不在C++标准内,没有配套的输入输出工具,无法直接使用scanfprintfcincout 进行处理。需要自己手写输入输出。

输入
代码语言:javascript
复制
void read(__int128 &ans){
    __int128 x,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();
    }
    ans=x*f;
}
输出
代码语言:javascript
复制
void output(__int128 x){
	if(x<0){
		putchar('-');
		x*=-1;
	}
	int ans[35]={0},top=0;
	do{
		ans[top++]=x%10;
		x/=10;
	}while(x);
	while(top){
		putchar(ans[--top]+'0');
	}
}

Q.E.D.

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 说明
  • 存储范围
  • 使用方式
    • 声明定义
      • 输入输出
        • 输入
        • 输出
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档