
1.高精度的计算
2.排序(1)
本篇目录
目录
系列文章目录
本篇目录
前言
一、什么是高精度
1.1 高精度的介绍
1.2 高精度的储存方式
二、高精度的计算
2. 1 加法
2.2 乘法
三、高精度的代码实现
总结
前言
在c++的学习过程中,有许许多多的计算需要完成,但某些数实在是太大了,int、long long等c++提供的存储空间装不下,那该怎么办呢?于是,高精度计算就出现了。
一、什么是高精度 1.1 高精度的介绍
高精度的实现十分简单,主要通过数组储存每一位的数字。难点在于其计算,我会在稍后讲解。关于高精度的存储及代码,有几个不同的版本,我将会介绍我认为简单的方法。
1.2 高精度的储存方式首先,我们来举一个简单的例子,比如623798,他用高精度存储就为:
| a[0] | a[1] | a[2] | a[3] | a[4] | a[5] | a[6] | |
|---|---|---|---|---|---|---|---|
| 数值 | 8 | 9 | 7 | 3 | 2 | 6 |
我们可以看到,高精度的储存是将整个数倒序储存的,方便计算进位时新增一位。那么我们该如何计算呢?
二、高精度的计算 2. 1 加法
我们采用的加法方式是先将两个加数同一位相加,不考虑进位,计算完毕后统一进位。什么意思呢?大概可以用下面的表表示。
| 9 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | |
| + | 1 | 1 | 1 | 1 | 9 | 1 | 9 | 1 | 1 |
| 10 | 2 | 2 | 2 | 10 | 2 | 10 | 2 | 2 |
上面这张表是不考虑进位后得出的结果。接下来我们统一进位。
| 0 | 3 | 2 | 2 | 0 | 3 | 0 | 3 | 2 |
这样,我们就算出了111111119+119191111的结果为230302230,这个结果对不对呢?稍等,让我用计算器算一算。
算的没错,可见我的思路没有问题。
2.2 乘法总体思路与加法没什么差别,我就不做过多的解释。
三、高精度的代码实现我将会列出加法的核心代码,乘法由大家在此基础上改动。
int temp=max(len1,len2);
for (int i=1;i<=temp;i++)
ans[i]=a[i]+b[i];
for (int i=1;i<=temp;i++)
{
ans[i]%=10;
ans[i+1]+=ans[i]/10;
}
总结
本篇讲述了高精度的原理及实现,希望能对大家有所帮助。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)