详解-创新互联

前言:有些题目需要的数值刚好比 long long 的大值大那么一点点,那么我们就可以用__int128 来搏一搏(并不是所有OJ都支持这个数据类型,受编译标准影响)

成都创新互联公司2013年成立,是专业互联网技术服务公司,拥有项目成都做网站、成都网站建设网站策划,项目实施与项目整合能力。我们以让每一个梦想脱颖而出为使命,1280元彭州做网站,已为上家服务,为彭州各地企业和个人服务,联系电话:13518219792

大值是多少

int 大值:2^(32-1)-1【受电脑字长影响】

long 大值:2^(32-1)-1【不可改变】

冷知识:int 大小受电脑字长影响,早期电脑通常为16位,那么 int大值 为:2^(16-1)-1;好一点的电脑为32位,那么 int大值 为:2^(32-1)-1。

现在最差的电脑也有32位,一般为64位,绝大多数情况默认64位。

即目前 int大值 皆为2^(32-1)-1,不会更大。

long long 大值:2^(64-1)-1【不可改变】 

__int128 大小:2^(128-1)-1 【不可改变】

关于__int128:只能进行四则运算,不能用cin和cout来输出(本蒟蒻在此不做解释),不能用位运算来定义大值。


定义大值 / 最小值

C/C++标准中自带大值和最小值宏定义(除了__int128,可能有,但是我没找到)

int 大值宏 INT_MAX

long 大值宏 LONG_MAX

long long 大值宏 LONG_LONG_MAX

因为可以四则运算,可以 __int128 MAX = LONG_LONG_MAX * LONG_LONG_MAX 来定义大值(2个LONG_LONG_MAX相乘最高位2^126,__int128大值最高位2^127-1,不会溢出)

最小值就是大值取个反,怕溢出的可以少算一点,比如 10 * LONG_LONG_MIN。


__int128的输入和输出

输入可以用string来读取,然后按位把值算进去

输出要手写,如下示例

#includeusing namespace std;
using maxType=__int128;

maxType a = (maxType)LONG_LONG_MAX*LONG_MAX;
void print(maxType x){
    stacko;
    while(x)o.push(x%10),x/=10;
    while(!o.empty())cout<


可能会用到的该知识点的题:[传智杯 #5 初赛] E-梅莉的市场经济学 - 洛谷

参考博文:详解__int128 - FReQuenter - 博客园(更具体,包含什么时候可以使用__int128)(看什么看,不如直接搏一搏)

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


本文名称:详解-创新互联
文章链接:http://ybzwz.com/article/cdcech.html