P1601 A+B Problem(高精)详细题解 原理解释+代码注释

文章介绍了如何处理超出常规数据类型范围的大数字计算,通过使用数组模拟存储和计算过程,详细阐述了高精度加法的计算原理,包括从个位开始的竖式运算、进位处理和数组存储。此外,文章还提到在C++中通过字符串转数组来处理输入数据,并强调了输入数据的倒序存储以适应计算需求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

完整代码请扒拉到最底下↓。

解题要求:掌握基础的判断、循环、数组、字符串以及一些计算原理即可

“高精度”是怎么一回事?

简单来说,就是我们计算的数字太大太大了,导致已经超出了我们可以定义的范围,以至于我们不能用正常的定义来定义和计算数字,不然只能计算我们能所容纳的数字部分,无法达到要求。

比如longlong可以定义的范围在 -(2的63次方)到 2的63次方-1

如果此时数据过大,超过了longlong可以定义的范围,那么我们该如何计算它呢?这就需要我们运用到高精度的知识了。

题外话:Python没有这个限制,所以一行代码就解决了。

高精度计算的原理(以加法为例)

1.存储数据

你看既然我们数据太大,普通的定义都装不下了,那我们拿什么来装数据呢?没错,就是

数组

有同学可能会问:我们又不知道这个数有多长,我现在又不会用vector,(其实我现在也不会),那我们定义数组的时候应该定义多长的数组呢?

哎这可个是个好问题哇,题目给出的数据范围是:大于等于0,小于等于10的500次方,那10的500次方到底有多少位呢?

没想到这一步就难倒了我这个数学渣渣,但是我岂能因为这点困难而放弃,于是我选择了放弃参考大佬,但是我看了一圈下来都没人解释他们为什么要定义这么多位的数组或许是因为太简单了吧,所以我就在草稿纸上简单的算了一下:

10 ^ 2 = 100,有 3 位。

10 ^ 3 = 1000,有 4 位。

10 ^ 10 = 10000000000,有 11 位。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值