LLONG_MAX和0x3f3f3f3f的区别及后续知识补充

一、

1. 数值范围的不同

  • LLONG_MAX 是 C++ 标准库中定义的 最大long long 类型数值(即 9223372036854775807),它是一个非常大的数。
  • 0x3f3f3f3f 是一个十六进制数,转换为十进制为 1061109567,虽然它也很大,但相比于 LLONG_MAX,差了很多个数量级。

如果你使用的是 0x3f3f3f3f 作为初始值,而问题的解可能要求的最优值非常接近或超过这个数(例如,数值范围接近 10^{12} 或者更大),那么 0x3f3f3f3f 可能不足以表示“无穷大”或一个足够大的初始值。在这种情况下,结果可能会被这个初始化值限制,导致无法正确更新 res,从而输出错误的结果。

2. 0x3f3f3f3f 的常用场景

0x3f3f3f3f 通常在编写动态规划(DP)或者图算法(如 Dijkstra)的过程中用作“无限大”的近似值。这是因为对于某些应用场景(例如较小范围的数值问题),0x3f3f3f3f 足够大,并且使用它可以方便地进行内存初始化操作。

例如,0x3f3f3f3f 的四字节内存可以用 memset() 函数轻松初始化一个数组,并且这种方式的性能较好。对于较小的数值范围问题(如 int 范围内),0x3f3f3f3f 作为无穷大值是有效的,但对于更大的问题范围来说,它是不够大的。

3. LLONG_MAX 的用途

在涉及到 long long 类型 的问题时,尤其是问题的输入范围较大(例如 AtCoder 题目中 NK 的上限为 2 * 10^5,输入的 A_iB_i 的最大值可能达到 10^6,乘积可能达到 10^{12}),需要用 long long 类型来存储数据。如果初始化 res0x3f3f3f3f,它的值可能不足以捕获那些非常大的解。

LLONG_MAXlong long 类型能够表示的最大值,这就确保在你的算法中,可以处理更大的问题范围。

二、

1.  9的数学规律

        内容:

         被除数的各位数字之和与除数的余数有一定关系。具体来说,涉及到一个数学规律:一个数能被 9 整除,当且仅当它的各位数字之和能被 9 整除

        具体分析:

        例如: 

  • n = 123
    各位数字之和 S(123) = 1 + 2 + 3 = 6,不是 9 的倍数,123 不能被 9 整除。

  • n = 999
    各位数字之和 S(999) = 9 + 9 + 9 = 27,是 9 的倍数,999 能被 9 整除。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值