详解__int128,最大可用整数类型

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

最大值是多少

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来读取,然后按位把值算进去

输出要手写,如下示例

#include <bits/stdc++.h>
using namespace std;
using maxType=__int128;

maxType a = (maxType)LONG_LONG_MAX*LONG_MAX;
void print(maxType x){
    stack<int>o;
    while(x)o.push(x%10),x/=10;
    while(!o.empty())cout<<o.top(),o.pop();
    cout<<endl;
}

int main(){
    cout<<"LONG_LONG_MAX:";
    print(LONG_LONG_MAX);
    cout<<"maxType:";
    print(a);
    return 0;
}


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

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

  • 13
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
引用\[1\]和\[2\]提供了两段代码,其中包含了unordered_map的使用。引用\[1\]中的代码在使用g++编译时可能会出现unordered_map不被识别的情况。而引用\[2\]中的代码通过注释掉#include<tr1/unordered_map>这一行,并使用#include<unordered_map>来解决了这个问题。 引用\[3\]提供了一个统计出现次数的示例代码,其中使用了unordered_map<int, int>来创建一个字典。这个字典用于存储每个元素出现的次数。在循环遍历nums数组时,通过countMap\[e\]++来统计每个元素出现的次数。如果某个元素的次数大于1,则返回true,表示存在重复元素。如果循环结束后仍未返回true,则返回false,表示不存在重复元素。 综上所述,unordered_map<int, int> dictionary;是用来创建一个存储int类型键和int类型值的字典的语句。你可以根据需要使用这个字典来实现各种功能,比如统计元素出现次数等。 #### 引用[.reference_title] - *1* *2* [C++中unordered_map出现的若干问题详解(找不到库,找不到unorded_map,编译问题)](https://blog.csdn.net/petal1990/article/details/48162327)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [unordered_map系列关联式容器](https://blog.csdn.net/aaaaaaaWoLan/article/details/122805226)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值